Нажатие кнопки веб-сайта - Perl WWW :: Mechanize - PullRequest
2 голосов
/ 16 ноября 2011

Я пытаюсь использовать Perl-скрипт для автоматизации взаимодействия с сайтом.

Я использую модуль WWW :: Mechanize для реализации моего дизайна. Но я не могу выполнить нажатие кнопки в моем скрипте perl с помощью команды, приведенной ниже.

$mech->click( $button [, $x, $y] ) 
$mech->click_button( ... ) 

Это потому, что эта кнопка не принадлежит ни к какой форме и без имени, я не могу позвонить или найти эту кнопку в моем скрипте Perl. Как я могу сделать возможным нажатие этой кнопки в моем скрипте perl, как будто я взаимодействую с браузером? Спасибо.

<button class="button transactional" id="checkout-now"><span>Check Out Now</span></button>

Ответы [ 5 ]

3 голосов
/ 16 ноября 2011

Если кнопка не принадлежит какой-либо форме, для нее должно быть определено событие onclick, например, как @Bilzac и @hijack. В этом случае вы не сможете воспроизвести поведение браузера, поскольку WWW::Mechanize выполняет только html-анализ.

Работая с событиями JavaScript, проще реализовать сетевую активность браузера, чем реализовать целые события JavaScript и взаимодействие с DOM.

1 голос
/ 16 ноября 2011

Ну, иногда все, что вам нужно, это $mech->post(), потому что сложнее найти, что происходит с JavaScript, когда вы нажимаете какой-то элемент.

Таким образом, вам нужно выяснить, какой запрос выполняется, когда вы нажимаете эту кнопку (для этого вы можете использовать Firefox HttpFox), а после этого создаете тот же запрос, используя WWW :: Mechanize:

$mech->post($request_url, Content => {FORM_FIELDS...});
0 голосов
/ 16 ноября 2011

Нажатие кнопки в браузере запускает только часть JavaScript.Вы не можете сделать это в WWW :: Mechanize, потому что не имеет поддержки JavaScript .

То, что вы могли бы сделать, это найти код JavaScriptзапускается при нажатии кнопки и пишет некоторый код на Perl, чтобы сделать то же самое.К сожалению, иногда бывает трудно найти, какие обработчики событий JavaScript применяются к элементу .Даже превосходный Firebug , похоже, не имеет простого способа перечислить все обработчики событий, связанные с элементом.(Существует расширение Eventbug , но на первый взгляд кажется, что оно работает не очень хорошо.) Возможно, стоит попробовать букмарклет Visual Event .

0 голосов
/ 16 ноября 2011

Вы можете добавить событие onclick на эту кнопку. как это:

<button onlick="alert('hello');">Click Me</button>
0 голосов
/ 16 ноября 2011

Я не на 100% уверен в том, что вы просите, но я собираюсь в этом разобраться. Вам не нужно, чтобы кнопка была частью формы для любого вида интерактивности. Вы можете сделать это только с помощью JavaScript и HTML.

$('#checkout-now').click( function() {
     alert('Hello!');
     //Do other stuff here, regarding the form! (Call Perl scripts etc.)
});

http://jsfiddle.net/fCdxR/1/

Быстрый пример того, как это работает! Надеюсь, что это решит вашу проблему.

...