2010-02-14 49 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');

將選擇包含一個名爲用戶名字段的形式。 心連心

相關問題