【问题标题】:Website button click - Perl WWW::Mechanize网站按钮点击 - Perl WWW::Mechanize
【发布时间】:2011-12-30 03:02:18
【问题描述】:

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

【问题讨论】:

标签: html perl automation www-mechanize


【解决方案1】:

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

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

【讨论】:

  • yko - 谢谢你的回答。但是,这个网站不属于我。因此,我无法更改 html 方法。我怎样才能使它成为可能?谢谢。
  • 有两种方法:窥视 JavaScript(这很无聊,需要很长时间并且需要 JS 知识)和窥视浏览器的网络活动。使用开发人员工具/firbug 的 Firefox 或 Chromium Network 选项卡查看单击按钮并在脚本中实现该网络活动时发生的情况。这实际上是我不使用WWW::Mechanizefamily 的原因(虽然它有时很方便)
  • yko - 感谢您分享宝贵的经验。我很想问,你能让我知道如何使用 firebug 来查看脚本在做什么吗?谢谢。
【解决方案2】:

嗯,有时您只需要$mech-&gt;post(),因为当您单击某个元素时,很难找到 JavaScript 发生的事情。

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

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

【讨论】:

  • 谢谢。我可以使用上述方法解决我的问题。
【解决方案3】:

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

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

【讨论】:

  • 感谢您的回复。我为我的问题提供了更多信息。请再看一遍问题。我很抱歉我的问题描述不佳。
【解决方案4】:

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

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

【讨论】:

    【解决方案5】:

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

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

    【讨论】:

    • 感谢您的回复。我为我的问题提供了更多信息。请再看一遍问题。很抱歉我的问题描述不佳。
    • 他正在尝试自动单击链接或类似性质的东西,他可能处于一个甚至没有浏览器或 javascript 访问权限的环境中(例如,尝试在 AIX 或某些没有回购管理器的操作系统)。
    猜你喜欢
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    相关资源
    最近更新 更多