我尝试使用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>
答案 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.)
});
它是如何工作的快速示例! 希望这能解决你的问题。