• ベストアンサー

Win32::IE::Mechanizeで、textarea内のデータを取得する方法

ActivePerl5.8.7でWin32::IE::Mechanizeを使っています。 textarea内のデータを取得する方法はどうすれば良いのでしょうか? またエラーの場合、標準出力されてしまうので、これを拒否する方法は ???をどのように設定すればよいのでしょうか? my $ie = Win32::IE::Mechanize->new( ??? ); Win32::IE::Mechanizeに関する情報を集めたいですが、詳しく書かれている サイトや書籍はありますか?

  • Perl
  • 回答数3
  • ありがとう数0

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

  • ベストアンサー
  • guci-ok
  • ベストアンサー率33% (49/146)
回答No.3

textareaのnameが無い状態であれば、入力域を個々に調べることになります。 #!/Perl/bin/perl use Win32::IE::Mechanize; my $ie = Win32::IE::Mechanize->new(visible => 1); $ie->get("http://localhost/test.html"); my $found; for my $input ($ie->current_form->inputs()) { my $name = $input->name(); my $type = $input->type(); my $value = $input->value(); print "\$name=$name \$type=$type \$value=$value\n"; $found = $value if ! $found and $type eq "textarea"; } if ($found) { print "TEXTAREA is: $found\n"; } else { print "TEXTAREA not found\n"; } __END__ D:>testIEM.pl $name= $type=textarea $value=これはテストだよ~だ! $name=test1 $type=text $value= $name=sub $type=submit $value=送信 TEXTAREA is: これはテストだよ~だ! D:>

その他の回答 (2)

  • guci-ok
  • ベストアンサー率33% (49/146)
回答No.2

#1をWin32::IE::Mechanizeで書くとこうなります。 #!/Perl use Win32::IE::Mechanize; my $ie = Win32::IE::Mechanize->new(visible => 1); $ie->get("http://localhost/test.html"); my $val = $ie->current_form->value("test"); print $val; __END__ まずは、モジュール内のdocを見ては? Win32::IE::Mechanizeは、WWW::Mechanizeを真似たモジュールを目指しているので、WWW::Mechanizeも参考にすると良いと思います。

  • omni2
  • ベストアンサー率53% (33/62)
回答No.1

Win32::OLEを使えばできるんですが、それじゃだめでしょうか・・ ######################################## ▼test.html▼ <HTML><HEAD></HEAD> <BODY> <FORM action="test.cgi"> <TEXTAREA rows="10" cols="30" name="test">これはテストだよ~だ!</TEXTAREA><BR> <INPUT type="text" name="test1" size="25"> <INPUT type="submit" name="sub" value="送信"> </FORM> </BODY> </HTML> ########################################### ▼test.cgi▼ #!/Perl/bin/perl use Win32::OLE; my $ie = Win32::OLE->new('InternetExplorer.Application'); $ie->navigate("http://localhost/test.html"); $ie->{Visible} = 1; while (($ie->{Busy} == 1)){ sleep(1); } my $val = $ie->{Document}->{all}->{test}->{Value}; print $val;

kounesi
質問者

補足

レスが遅くなりました。 このtextareaのnameが無い状態ですので、 my $val = $ie->{Document}->{all}->{****}->{Value}; ****が使えません。 他に何か方法があるのでしょうか?

関連するQ&A

  • niceditのtextareaの取得方法

    リッチテキストエディタのniceditを使おうとしています。 他のエディタと比べるとかなりサイズも小さいため容易に動作も軽いです。 ただ、基本的な表示デフォルト時のセットや取得の方法が分かりません。 単純にForm + textareaのnameで取得できると思ったのですが、取得できませんでした。(FireBugで中身を確認したのですが、タグ表記のHTMLソースらしきものが見つかりませんでした。) <script> function onclick() {  alert(document.test.area.value;); } </script> <form name="test" enctype="multipart/form-data" method="post">  <textarea id="area" name="area"></textarea> 助言頂ければうれしいです。 OS :WinXP-SP3 ブラウザ:IE6.0 で確認してますが、FF3 & Opera等でも動作させたいと思ってます。

  • RubyによるMechanizeを利用したformの取得について

    kamuycikapです。 <環境> OS : Windows7 Ruby: ActiveScriptRuby     ruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mswin32] <やりたいこと> 手順1.ログインページにアクセスし、ログインIDとパスワードを入力し、ログインボタンをクリックする。 手順2.手順1から遷移したページに設置されている「CSVダウンロード」ボタンをクリックしてCSVファイルを取得する <ソースコード> ---ここから require 'rubygems' require 'mechanize' require 'kconv' agent = WWW::Mechanize.new page = agent.get('https://www.superdelivery.com/common/auth/login') login_form = page.forms.first login_form.fields[0].value = "hogehoge"  # ログインID入力 login_form.fields[1].value = "foobar"   # パスワード入力 redirect_page = agent.submit(login_form) ---ここまで 上記プログラムを実行すると下記のエラーが発生します。 undefined method `fields' for nil:NilClass (NoMethodError) pメソッドを利用してpageを画面に表示してみた処、以下の様子です。 ---ここから #<WWW::Mechanize::Page {url #<URI::HTTPS:0x467dba4 URL:https://www.superdelivery.com/common/auth/login>} {meta} {title "\343\202\242\343\203\221\343\203\254\343\203\253\343\203\273\351\233\221\350\ 262\250\343\202\222\345\215\270\350\262\251\345\243\262-\343\202\271\343\203\274 \343\203\221\343\203\274\343\203\207\343\203\252\343\203\220\343\203\252\343\203 \274"} {iframes} {frames} {links #<WWW::Mechanize::Page::Link "" nil> #<WWW::Mechanize::Page::Link "\347\271\247\357\275\271\347\271\235\357\275\274\347\271\235\344\273\243" "http://www.superdelivery.com/">} {forms}> ---ここまで どうも、formを引っ張ってこれてない模様です。 name属性が設定されていれば問題無いのかもしれないのですが、name属性もありません。 結果として、ログインを行うことすら出来ておりません。 formの内部にあるテキスト領域等にアクセスするためのメソッドはformクラスのFieldにぶら下がっている様子ですので、formが取得できてなければ利用できないのではないかと想像しています。 参考にしたサイトは下記のとおりです。 http://mechanize.rubyforge.org/mechanize/WWW/Mechanize/Form/MultiSelectList.html http://d.hatena.ne.jp/kitamomonga/20090307/ruby_mwchanize_0_9_2_out WIN32OLEを使って、IEを自動操縦する事も検討したのですが、出来るならMechanizeを利用してスマートに処理を実行したいです。 上記のコードは私が利用しているサイトのログインページですが、ログインを利用するページでname属性の無いformを利用しているページであれば何処でも一緒なのではないかと思います。 解決策についてご教示願います。

    • ベストアンサー
    • Ruby
  • WWW::Mechanizeでfc2にログインする方法

    WWW::Mechanizeでfc2にログインする方法 WWW::Mechanizeでfc2ブログ管理画面にログインしようとしたところ、上手くできませんでした。 $mech = WWW::Mechanize->new(autocheck => 1); $mech->get('http://fc2.com/login.php?ref=blog'); ・・・※1 $mech->submit_form(                ・・・※2 fields => { email=> [ユーザID], pass => [パスワード], }, ); $mech->title()や$mech->content()で確認したところ、※1のページ(ログイン画面)までは取得できているようです。 しかし※2のログイン情報の送信後に、同じように確認したところ、ログイン後に表示されるはずの管理画面へ遷移していませんでした。 [ユーザID],[パスワード]の設定値は正しいことを確認しています。 フィールド名(email,pass)はmech-dumpコマンドで確認しました。 $mech->success()は1を返しています。 どうすればログインできるようになりますか? 間違いや他に確認すべき項目をご教示いただけたら幸いです。 実行環境:ubuntu

    • ベストアンサー
    • Perl
  • textareaの現在の行インデックスを取得する

    対象ブラウザはGoogle Chromeです(IEでは解決済み) textareaのボックス内で、現在キャレットが位置する行インデックスを 取得したいのですが、どうすればよいでしょうか。 最終的にやりたいのはオートインデントです。 textarea内でEnterキーを押した時に、その行の先頭のスペースの数を調べて 次の行の先頭に同じ数のスペースを自動で挿入します。 このため、Enterキーを押した瞬間の行インデックスを取得する必要があります。 その後の処理であるスペースの挿入は方法が分かっているので問題ありません。 よろしくお願い致します。

  • LWPで応答データを取得できない

    お世話になります。 perl5でLWPを使用しているのですが、一部のサイトでデータを取得できず困っております。 具体的には my $ua = LWP::UserAgent->new; $ua->agent('Mozilla/5.0'); my $req = HTTP::Request->new(GET => "http://misshiki.blog7.fc2.com/?xml"); my $res = $ua->request($req); my $buf = $res->content; といった感じでRSSを取得したいのですが、$bufが空になってしまいます。 しかし、 $res->as_string とすると、レスポンスヘッダも含めてRSSが取得できていることが確認できます。 また、上記以外のURLでは正常に$res->contentでデータを取得することができています。 どうもFC2ブログのRSSのみの事象のようではあるのですが、対処方法がわからず困っております。 対策をご教授いただければ幸いです。 以上、よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • CGIでフォームデータを取得できません

    CGI(perl)の標準入力についてお伺いいたします。 PC上でテストし動作を確認したCGIをプロバイダのCGIサーバに移植しましたが、 正常に実行終了するものの、標準入力によるフォームデータの取得ができません。 フォームデータを受け取る変数が空になってしまいます。 PCとプロバイダのCGIサーバとでは、CGIスクリプトの記述方法が異なるのでしょうか。 書籍、ネットをだいぶ調べましたが、解決策が見当たりませんでした。 このような現象の原因について、お心当たりのある方がおられましたら、 ご教示いただきたいです。 (1)PC動作環境 a.OS: Windows 7 b.ブラウザ : Interne Eexplorer 11 c.CGIサーバ: Apache 2.4 d.perl : Activeperl 5.20 (2)CGIスクリプト(標準入力の部分) 尚、フォームでは、method="POST"を指定しております。 # フォームデータの取得 if($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { $query = $ENV{'QUERY_STRING'}; }

    • 締切済み
    • CGI
  • IEの設定を取得する方法

    IEの設定を取得する方法を教えてください。 WinXP, WinVista, Win7のIE5, IE5.5, IE6, IE7, IE8 のいずれかで出来る方法ならとりあえずOKです。 できれば多くのバージョンをカバーする方法がいいのですが、 単独のバージョン依存の情報でもOKです。 とりたい情報は以下の設定などです。 ◎ツール→インターネットオプション→詳細設定 (マイコンピュータのファイルでのアクティブコンテンツの実行を許可する、とか) ◎ツール→インターネットオプション→セキュリティ→レベルのカスタマイズ (ActiveXコントロールとプラグインの実行・ダイアログを表示する、とか) ※この2つの情報だけが取れればいいというわけではなく こういう情報をごっそりととりたいと思っています。 画面キャプチャをとるのもばかばかしいので、何らかの方法で テキスト情報として取得したいと思っています。 ツールもしくはスクリプトで取得、もしくはレジストリの IE部分をコピペとかでもOKです。 JScript・VBScript(WSHでもhtaでも)ともにコーディングできます。 ・あとでみて意味が分かるように ・2つのブラウザの設定の差分が分かるように ・設定を戻すもしくは設定変更が容易 という希望を持っています。 IEの設定情報をテキスト形式で取得する方法、これを教えてください。 よろしくお願いします。

  • IE9が開かない(Win7)

    Internet Explorerを開くとフリーズする現象がつづいていたため、 HDDのチェックとともに、IEをアンインストールし、IE9を再インストールしようとしたところ、 IEが立ちあがらず、新規でインストールしようとしてもエラーが出て、 インストールができません。 解決方法を教えて頂けませんか。 ■症状 IEを立ち上げようとすると「Internet Explorerは動作を停止しました」と出ます。 Chromも立ち上がりません(Firefoxは問題なく動きます) IE8を新たにインストールしようとすると、Win7ではサポートされていない、とメッセージがでて IE9をインストールするとエラーになります。 ■原因 コンパネのプログラムと機能のインストールされた更新プログラムで、IEを書かれた物を 削除してしまった事が原因かと思われます。 ネットで調べたところ、IE8が入っていないと、IE9のインストールは出来ないと言う事は 分かったのですが、どうしたら解決できるのか分かりませんでした。 解決策を教えて頂けないでしょうか…

  • FetchRow()によるデータの取得

    どなた様か、お知恵をください。 Win32 ODBCでデータベースのデータを取得するコードを書いております FetchRow()メソッドについて、マニュアルを読みますとFetchRow([ROW])の ROWを指定することにより、キーセットを相対的にROW番目の行に移動できると記述されておりました。 これを利用してROW番目の行からのデータを得ようと考えたのですが、下記のコードでは先頭からのデータを読んでしまうようです。 どのようにしたら指定の行からのデータを読めるのでしょうか。 use Win32::ODBC; my $dbs = new Win32::ODBC("DSN=seminar"); $dbs->Sql("SELECT dataid, event_name FROM T001"); for($i=0; $i < 15; ++$i){ $dbs->FetchRow(10); undef %FIELDS; %FIELDS = $dbs->DataHash(); } $dbs->Close();

    • ベストアンサー
    • Perl
  • win7のIEのメニューが

    win7の標準バージョンのIEのメニューが薄い字になって使用できない時があります。 ファイル・編集・表示、とかのやつです。 どうしてこうなるのでしょうか? ブラウザを立ち上げ直すと治ると思うのですが、 お気に入りに入れたい場合、そのまま復帰してほしいのですが、方法はありますか?

専門家に質問してみよう