2

我尝试使用 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>
4

5 回答 5

3

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

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

于 2011-11-16T07:14:08.773 回答
1

好吧,有时您所需要的只是$mech->post()因为当您单击某个元素时很难找到 JavaScript 发生的事情。

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

$mech->post($request_url, Content => {FORM_FIELDS...});
于 2011-11-16T08:46:36.810 回答
0

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

<button onlick="alert('hello');">Click Me</button>
于 2011-11-16T05:20:30.450 回答
0

在浏览器中单击按钮只会运行一段 JavaScript。你不能在 WWW::Mechanize 中这样做,因为它不支持 JavaScript

但是,您可以做的是找到单击按钮时正在运行的 JavaScript 代码,然后编写一些 Perl 代码来做同样的事情。不幸的是,有时很难找到适用于元素的 JavaScript 事件处理程序。即使是其他方面非常出色的Firebug似乎也没有任何简单的方法来列出与元素关联的所有事件处理程序。(确实存在一个Eventbug扩展,但乍一看它似乎不太好用。)Visual Event小书签也可能值得一试。

于 2011-11-16T07:48:26.523 回答
-1

我不是 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/

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

于 2011-11-16T05:19:08.483 回答