2010-02-14 41 views
7

我遇到了我的Perl程序问题。该程序登录到特定的网页并填写消息的文本区域和移动号码的输入框。点击“发送”按钮后,该消息将被发送到指定的号码。我已经准备好发送消息了。但问题是我无法让它接收消息/回复。我在Perl中使用WWW::Mechanize模块。这里是我的代码的一部分(接收消息):如何使用Perl的WWW :: Mechanize访问没有名称或ID的表单?

$username = 'suezy'; 
$password = '123'; 
$url = 'http://..sample.cgi'; 

# ... 

$mech->credentials($username, $password); 
$mech->get($url); 

$mech->submit(); 

我的问题是,表格显示没有名字。此表单中有两个按钮,但我无法选择要点击的按钮,因为没有指定名称,ID包含空格(例如,表单名称='接收信息'..)。我需要点击第二个按钮'接收'。

的问题是,我怎么能够访问使用机械化模块不使用名称的形式和按钮?

回答

4

您可以通过一个form_number参数的submit_form方法。

或拨打form_number方法来影响它的形式是使用以后调用点击或字段。

+0

谢谢!但是如何访问按钮? – Suezy 2010-02-14 09:16:29

+1

你最近怎么样?你的例子显示提交,所以我建议submit_form(form_number => xxx),而不是;如果您使用的是click或click_button,我建议事先调用form_number方法。 – ysth 2010-02-14 12:04:40

4

您是否尝试过使用HTTP Recorder
查看文档并尝试查看它是否为您提供了合理的结果。

+0

谢谢!我会检查出来的。 :) – Suezy 2010-02-15 01:20:36

+0

我再次有一个问题,请问如何启用使用机械化的单选按钮? – Suezy 2010-02-15 01:30:26

+0

使用HTTP Recorder的想法是查看生成的脚本 - 然后您可以看到实际发送的内容。我想它应该像$ mech-> set_visible([radio =>'KCRW']);在您录制的代码中。 – weismat 2010-02-15 08:00:50

3

眼看只有两个窗体上的按钮,YSTH的建议应该很容易实现。

use strict; 
use warnings; 
use WWW::Mechanize; 

my $username = "suezy"; 
my $password = "123"; 
my $url = 'http://.../sample.cgi'; 
my $mech = WWW::Mechanize->new(); 

$mech->get($url); 
$mech->credentials($username,$password); 

然后:

$mech->click_button({number => 1});  # if the 'Receive' button is 1 

或者:

$mech->click_button({number => 2});  # if the 'Receive' button is 2 

试验和错误的情况下是绰绰有余为你找出你点击了哪个按钮。

编辑

我假设相关表格已经选定。如果不是:

$mech->form_number($formNumber); 

其中$formNumber是相关页面上的表格编号。

+0

click_button数字是(根据文档,无论如何)相对于当前表单;你必须先调用form_number。 – ysth 2010-02-14 12:04:01

+0

@ysth:正式注意,回答更新 – Zaid 2010-02-14 12:42:07

+0

明白!谢谢! :) – Suezy 2010-02-15 01:21:35

1

$mech->form_with_fields('username');

将选择包含一个名为用户名字段的形式。 心连心