У меня есть эта форма
<form method="post" action="index.lp" name="authform" id="authform">
<input type="password" name="password" id="password" onkeypress="return enter_submit(event);" />
<input name="enter" class="btn btn-primary" type="button" value="log in" onclick='auth()' />
Я могу представить его благодаря javascript таким образом
javascript:document.getElementById("password").value = "password";auth();
Теперь мне нужно написать perl-скрипт, чтобы сделать это автоматически, и когда он запустит выполнение другой функции javascript на странице. Я тестирую его на компьютере и имею некоторые проблемы:
1) Perl нужен компилятор ac... после того, как я смогу установить его на openwrt?
2) Я могу попробовать 2 разных способа:
Первым и более быстрым является использование WWW :: Scripter :: Plugin :: JavaScript, но я не могу установить модуль, потому что я не могу установить mingw (я сделал, в ppm-shell, установил mingw и он вернулся "ppm install failed: Can ' t найти пакет, который предоставляет mingw "). Кроме того, я не вижу WWW :: Scripter в пакете Perl. Я написал этот скрипт (может ли он работать?):
use WWW::Scripter;
$w = new WWW::Scripter;
$w->use_plugin('JavaScript');
$w->get('http://url');
$w->get('javascript:document.getElementById("password").value = "password";auth();');
sleep (1);
$w->get('http://url');
$w->get('javascript: function();');
Второй - использовать WWW: Mechanize. Как я могу видеть выходную страницу? И как я могу отправить команду на вторую страницу? Теперь с этим скриптом я получаю эту ошибку: "Отсутствует базовый аргумент в D: /Program Files/Perl/lib/HTTP/Response.pm line 92.". (может ли он работать?)
use WWW::Mechanize;
my $mech = WWW::Mechanize->new();
$mech->get( $url );
$mech->follow_link( url => 'http://url' );
$mech->submit_form(
form_name => 'authform',
fields => { password => 'password', },
button => 'log in'
);
Я бы работал с WWW :: Mechanize, интерпретация JS, которая полагается на DOM без реального браузера, почти невозможна.
$mech->content()
вы получите необработанный HTML- $mech->content()
из WWW :: Механизируйте последнюю выбранную страницу.
Если у вас есть страницы с тяжелым железом, которые вам нужно автоматизировать, и вы хотите использовать perl, изучите использование Selenium WebDriver для управления "реальным" браузером (даже если он безголовый, как phantomjs).
Что касается ошибки, которую вы получаете: убедитесь, что ваши действия работают правильно, и посмотрите, что происходит в D: /Program Files/Perl/lib/HTTP/Response.pm
line 92 и что он ожидает.