网站按钮单击 - Perl WWW :: Mechanize

时间:2011-11-16 05:08:53

标签: html perl automation www-mechanize

我尝试使用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 个答案:

答案 0 :(得分:3)

如果按钮不属于任何形式,则应该定义onclick事件,如@Bilzac和@hijack所述。在这种情况下,您无法重现浏览器的行为,因为WWW::Mechanize仅进行html分析。

处理JavaScript事件更容易实现浏览器的网络活动,而不是实现整个JavaScript事件和DOM交互。

答案 1 :(得分:1)

有时您需要的只是$mech->post(),因为当您点击某个元素时,很难找到使用JavaScript的内容。

因此,您需要查找单击此按钮时执行的请求(您可以使用Firefox HttpFox),然后使用WWW :: Mechanize构建相同的请求:

$mech->post($request_url, Content => {FORM_FIELDS...});

答案 2 :(得分:0)

您可以在此按钮上添加onclick事件。像这样:

<button onlick="alert('hello');">Click Me</button>

答案 3 :(得分:0)

单击浏览器中的按钮只会运行一段JavaScript。你不能在WWW :: Mechanize中这样做,因为it has no JavaScript support

不幸的是,it can sometimes be hard to find which JavaScript event handlers apply to an element。即使是非常优秀的Firebug似乎没有任何简单的方法来列出与元素关联的所有事件处理程序。 (确实存在Eventbug扩展名,但一眼就看起来效果不佳。)Visual Event书签也可能值得尝试。

答案 4 :(得分:-2)

我不是百分百肯定你要求的,但我会对此动摇。 您不需要该按钮作为任何类型的交互性的表单的一部分。你可以用JavaScript&amp; amp; HTML。

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

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

它是如何工作的快速示例! 希望这能解决你的问题。