Как отправить эту форму через Perl для Openwrt / LEDE

1

У меня есть эта форма

<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'
);
Теги:
openwrt
www-mechanize

1 ответ

0

Я бы работал с WWW :: Mechanize, интерпретация JS, которая полагается на DOM без реального браузера, почти невозможна.

$mech->content() вы получите необработанный HTML- $mech->content() из WWW :: Механизируйте последнюю выбранную страницу.

Если у вас есть страницы с тяжелым железом, которые вам нужно автоматизировать, и вы хотите использовать perl, изучите использование Selenium WebDriver для управления "реальным" браузером (даже если он безголовый, как phantomjs).

Что касается ошибки, которую вы получаете: убедитесь, что ваши действия работают правильно, и посмотрите, что происходит в D: /Program Files/Perl/lib/HTTP/Response.pm line 92 и что он ожидает.

  • 0
    Ах да, извините, забыл про OpenWRT. Механизация должна все еще работать без этого. Если вы работаете с JS, вы можете просто подделать его и заставить Mechanize самостоятельно отправлять правильный запрос, не интерпретируя JS (посмотрите, что отправляет ваш браузер, и воспроизведите это, в основном).
  • 0
    я не могу использовать селен на openwrt / LEDE, потому что у них нет реального браузера! Mechanzine не должен интерпретировать javascript, а должен просто отправить форму (вы читаете код, который я опубликовал?) Вместо WWW :: Scripter :: Plugin :: JavaScript можно интерпретировать javascript. Что вы предлагаете мне сделать? Вы должны думать, что мне нужно использовать на openwrt / LEDE, а не на других ОС
Показать ещё 10 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню