7

Perlプログラムに問題があります。このプログラムは特定のWebページにログインし、メッセージのテキスト領域と携帯電話番号の入力ボックスを埋めます。「送信」ボタンをクリックすると、メッセージは指定された番号に送信されます。私はすでにメッセージを送信するためにそれを動作させました。しかし、問題は、メッセージ/返信を受信するためにそれを機能させることができないということです。PerlでWWW::Mechanizeモジュールを使用しています。これが私のコードの一部です(メッセージを受信するため):

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

# ...

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

$mech->submit(); 

私の問題は、フォームに名前が表示されないことです。このフォームには2つのボタンがありますが、名前が指定されておらず、IDにスペースが含まれているため(たとえば、form name =' receive msg ' ..)、クリックするボタンを選択できません。2番目のボタン「受信」をクリックする必要があります。

質問は、名前を使用せずにmechanizeモジュールを使用してフォームとボタンにアクセスするにはどうすればよいですか?

4

4 に答える 4

4

form_number引数をsubmit_formメソッドに渡すことができます。

または、form_numberメソッドを呼び出して、後でクリックまたはフィールドを呼び出すときに使用されるフォームに影響を与えます。

于 2010-02-14T09:12:41.403 に答える
4

HTTP Recorderを使用しようとしましたか?
ドキュメントを見て、妥当な結果が得られるかどうか試してみてください。

于 2010-02-14T09:54:40.280 に答える
3

フォームにボタンが 2 つしかないことを確認すると、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問題のページのフォーム番号はどこにありますか。

于 2010-02-14T10:03:01.213 に答える
1

$mech->form_with_fields('username');

username という名前のフィールドを含むフォームを選択します。h番目

于 2010-05-12T08:55:21.463 に答える