• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Mechanizeにおけるボタンクリックについて)

Mechanizeにおけるボタンクリック方法とは?

このQ&Aのポイント
  • Perl Mechanizeを使って、HTMLのボタンを押す方法について試行したがうまくいかなかった。
  • 更新がなく処理がストップするエラーが出るため、ver1.54にUpdateしても同様のエラーが発生する。
  • form_numberとfieldを使用してもボタンを押すことができない。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

スクリプト自体には問題はなくて、CGI側で何かの条件で弾いているのかも しれません(例えば UserAgentなど)。 参考にあるかどうかわりませんが、 動作確認した結果をはっておきます。 ### html <form action="/URL" を <form action="MechanizeTest.cgi" に変更 その他テスト用に変更 ### MechanizeTest.cgi #!/usr/bin/perl -T use warnings; use strict; use CGI; use CGI::Carp; my $q = new CGI; print $q->header("text/plain"); print "These are the parameters I received:\n\n"; my @params = $q->param; foreach my $param (@params) { print "$param:\n"; my @values = $q->param($param); foreach my $value (@values) { print " $value\n"; } } ### Mechanize.pl ...... # Get HTML Contents print '-- HTML Form', "\n"; $mech->get($uri) or die "$!"; print $mech->content(); # Send Form print '-- Send Form', "\n"; $mech->submit_form( form_number => 1, fields => { 0 => '1', 1 => '2' }, ) or die "$!"; print $mech->content(); ### 結果 -- HTML Form <html><head><title> T i t l e</title></head><body> Second Level Title<br><br> <form action="MechanizeTest.cgi" method="post"> <input type="hidden" name="NAME" value="ABCD"> [Third Level Title 1] <br><select name="0"> <option value="0">AAA</option> <option value="1">BBB</option> <option value="2">CCC</option> <option value="3">DDD</option> </select><br> [Third Level Title 2]<br> <select name="1"> <option value="0">AAA</option> <option value="1">BBB</option> <option value="2">CCC</option> </select><br> <input type="submit" value="Display"></form> <hr>Not Found Data<br><hr> <a href="http://www.google.co.jp">link test</a> </html> -- Send Form These are the parameters I received: NAME: ABCD 0: 1 1: 2

Gentleman2
質問者

お礼

動作確認まで、ありがとうございます。 やはり、CGI側で弾いてるんですかね。 ありがとうございます。

Gentleman2
質問者

補足

_--_1l1_1_さん 理由がわかりましたので、報告します。 実は、表記スクリプトで<input type="submit" value="表示"></form> のボタンを押せてました。押せていないと勘違いしていたのは、サーバー側のDBの反映までに少し時間がかかり、反映されるまえに、前記ボタンを押しても、ページ遷移しないため、押せていないと勘違いしていたのでした。サーバーのDB反映を待つ処理を入れたところ、安定してボタンを押す動作ができるようになりました。いろいろとありがとうございました。改めて、御礼申し上げます。

その他の回答 (2)

回答No.2

> 種々の動作(リンクを辿るなど)して、 なるほど、なるほど $mech->submit_formを全然違うページにポストしているかもしれませんね。 $mech->submit_formを実行する直前で、print $mech->content();で "対象html"の内容が表示されるか、見たほうがよいですね。

Gentleman2
質問者

補足

パターン1~4の前後で、print $mech->content();を各々挿入し、パターン1~4のページ遷移を既に確認しておりました。それで、ページ遷移がありませんでした。コメントありがとうございます。その他お気づきの点がございましたら、ぜひ、よろしく願いします。

回答No.1

見ため、あっているようです。わからないなりに答えると (1) mech->getを事前に実行していない? mech->submit_formを実行する前に、フォームを受信するためmech->getを 実行する必要があるが、実行していない? (2) 実はPOSTできている。 次ようにするとどうなりますか? $mech->get($uri) or die "$!"; print '-- HTML Form', "\n"; print $mech->content(); $mech->submit_form( form_number => 1, fields => { 0 => '1', 1 => '2' }, ) or die "$!"; print '-- Response', "\n"; print $mech->content();

Gentleman2
質問者

補足

ご回答ありがとうございます。ご指示いただいたコマンドを実行してみます。ただ、現在サーバーがメンテナンス中のため、サーバー復旧後実行してみます。 mech->getは実行してます。最初にmech->getして、その後、ログインして、種々の動作(リンクを辿るなど)して、それで、上記のsubmitで困ってます。。。mech->getから、上記submitまでは、mechは、ずっと共通です。 というようなシーケンスですが、ご指示いただいたコマンドで解決の糸口は見つかりそうでしょうか?

関連するQ&A

専門家に質問してみよう