• 締切済み

mechanize のsearch methodについて

現在Rubyを勉強しているものです。 webページの情報を自動的に取得して、メールの送信をおこなう というプログラムを組んでいます。 Mechanizeを利用すれば可能であることがわかったのですが、 サンプルコードを実行してみたところ、 ./www/mechanize/page.rb:97:in `forms': undefined method `search' for nil:NilClass (NoMethodError) というエラーが発生してしまいます。 その他のコードや、linux環境でも試しましたが同様でした。 どなたかお分かりの方教えていただければと思います。

  • Ruby
  • 回答数3
  • ありがとう数34

みんなの回答

noname#149362
noname#149362
回答No.3

No.1 です。No.2 さんと同様、私の環境でも問題ありません。 いくつか確認させて下さい。 (1) 本当に以下の5行だけでエラーになりますか? 本当にエラーになるなら、エラーを起こしたスクリプト全文とエラー全文を書いて下さい (手打ちではなくコピー&ペーストで)。 -------- require 'rubygems' require 'mechanize' agent = WWW::Mechanize.new agent.get('http://www.google.co.jp/') p agent -------- (2) mechanize のバージョンはいくつですか? (0.9.0 が最新だと思います。) gem list mechanize で表示されます。 (3) その他の環境の状態を教えて下さい。 gem env で表示される情報です。 (4) ブラウザで http://www.google.co.jp/ は正常に表示されますか?

  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.2

補足に書かれたコードはp agentまで含めて問題なく動作しますよ。

chkk525
質問者

補足

そのはずなのですが、自分の環境ではうまくいかないんです。。。 必要なライブラリ、依存関係が原因かともおもい、 みてみたのですが、わかりませんでした。 どのエラーも 'search'っというメソッドがnilから呼ばれている と表示されるんです。

noname#149362
noname#149362
回答No.1

その「サンプルコード」全体を示してくれないと、誰も回答することができません。(私は mechanize を使っていないので、私自身はサンプルコードを見ても回答できないと思います。) エラーの内容から、 mechanize を呼び出す際に変数の中に何も入っていない (nil である) 可能性が高いと思います。

chkk525
質問者

補足

失礼しました。 require 'rubygems' require 'mechanize' agent = WWW::Mechanize.new agent.get('http://www.google.co.jp/') でサイトから情報を取り出せてはいるとおもうのですが、 そこから先に p agent などアクセスするメソッドを入れるとだめです。。。

関連するQ&A

  • 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
  • Array (NoMethodError)

    リンク先コードをcodepadで試したら下記エラーになりました。 エラーを消すにはどうすればよいでしょうか? Line 3:in `percentile_rank': undefined method `count' for [0, 20, 40, 60, 80, 100]:Array (NoMethodError) from t.rb:11 ▽Ruby - パーセンタイル順位   http://www40.atwiki.jp/spellbound/pages/2092.html

    • ベストアンサー
    • Ruby
  • RubyのDateクラスのメソッドが見つからない

    先日よりRubyでのプログラミングを始めてみたのですが DateクラスのDate::MOTHNAMESを参照しようとしたところ undefined method `MOTHNAMES' for Date:Class (NoMethodError) と返ってきてしまいました。 ほかにもDate::exist?メソッドもためしてみましたが、同じ様なコメントが 返ってきました。 undefined method `exist?' for Date:Class (NoMethodError) なお、 Date.newなどはつかえています どういった問題でどのように解決すれば良いのか、ご教示願えればと思います。 バージョンは ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin11.2.0] で、Mac OSX Lionで動かしています。

  • ruby mechanize アクセス出来ない

    https://login.ocn.ne.jp/auth/s2016/pc/AuthLoginDisplay.action このサイトにRubyのmechanizeからログインしたいのですが、 そもそもここにアクセスできていないようです。 .actionというのはhtmlと違ってアクセスできないのでしょうか。 以下、コードと出力です。 # -*- encoding: utf-8 -*- require 'rubygems' require 'mechanize' agent = Mechanize.new page = agent.get('https://login.ocn.ne.jp/auth/s2016/pc/AuthLoginDisplay.action') pp page 出力 #<Mechanize::Page {url #<URI::HTTPS:0x007f989240a150 URL:https://login.ocn.ne.jp/auth/s2016/pc/AuthLoginDisplay.action>} {meta_refresh} {title "システムエラー"} {iframes} {frames} {links #<Mechanize::Page::Link "ヘルプ" "http://www.ocn.ne.jp/login/mb/index.html"> #<Mechanize::Page::Link "著作権について" "http://mobile.ntt.com/m/copyright.html"> #<Mechanize::Page::Link "プライバシーポリシー" "http://506506.ntt.com/mbl/privacy/s_policy01.html"> #<Mechanize::Page::Link "→OCNトップ" "http://www.ocn.ne.jp"> #<Mechanize::Page::Link "NTT Communications" "http://www.ntt.com/"> #<Mechanize::Page::Link "著作権について" "http://www.ntt.com/COPYRIGHT/"> #<Mechanize::Page::Link "プライバシーポリシー" "http://www.ocn.ne.jp/privacy-policy/"> #<Mechanize::Page::Link "NTTコミュニケーションズ" "http://www.ntt.com/">} {forms}> 以上

    • ベストアンサー
    • Ruby
  • gemでmechanizeをインストールが失敗しま

    Rubyのライブラリをインストールするのに使う、「gem」についての質問です。 ちなみに、Windows 7の64bitを使っています。 ウェブブラウザエミュ系のライブラリを使いたく、 gemでMechanizeをインストールしようとしたのですが失敗します・・・。 gem install Mechanize をしようとすると、以下のようになります。 お助けを・・・。 C:\windows\system32>gem install Mechanize ERROR: Could not find a valid gem 'Mechanize' (>= 0) in any repository ERROR: Possible alternatives: mechanize C:\windows\system32>gem install mechanize Building native extensions. This could take a while... ERROR: Error installing mechanize: ERROR: Failed to build gem native extension. C:/Ruby200-x64/bin/ruby.exe -r ./siteconf20140719-13616-a69xok.rb extconf.rb checking for main() in -lstdc++... *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. Provided configuration options: --with-opt-dir --without-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=C:/Ruby200-x64/bin/ruby --with-stdc++lib --without-stdc++lib C:/Ruby200-x64/lib/ruby/2.0.0/mkmf.rb:434:in `try_do': The compiler failed to ge nerate an executable file. (RuntimeError) You have to install development tools first. from C:/Ruby200-x64/lib/ruby/2.0.0/mkmf.rb:519:in `try_link0' from C:/Ruby200-x64/lib/ruby/2.0.0/mkmf.rb:534:in `try_link' from C:/Ruby200-x64/lib/ruby/2.0.0/mkmf.rb:720:in `try_func' from C:/Ruby200-x64/lib/ruby/2.0.0/mkmf.rb:950:in `block in have_library ' from C:/Ruby200-x64/lib/ruby/2.0.0/mkmf.rb:895:in `block in checking_for ' from C:/Ruby200-x64/lib/ruby/2.0.0/mkmf.rb:340:in `block (2 levels) in p ostpone' from C:/Ruby200-x64/lib/ruby/2.0.0/mkmf.rb:310:in `open' from C:/Ruby200-x64/lib/ruby/2.0.0/mkmf.rb:340:in `block in postpone' from C:/Ruby200-x64/lib/ruby/2.0.0/mkmf.rb:310:in `open' from C:/Ruby200-x64/lib/ruby/2.0.0/mkmf.rb:336:in `postpone' from C:/Ruby200-x64/lib/ruby/2.0.0/mkmf.rb:894:in `checking_for' from C:/Ruby200-x64/lib/ruby/2.0.0/mkmf.rb:945:in `have_library' from extconf.rb:2:in `<main>' extconf failed, exit code 1 Gem files will remain installed in C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/unf_e xt-0.0.6 for inspection. Results logged to C:/Ruby200-x64/lib/ruby/gems/2.0.0/extensions/x64-mingw32/2.0. 0/unf_ext-0.0.6/gem_make.out

    • ベストアンサー
    • Ruby
  • ログオンしたら例外というコメントが・・・・

    当方、XPSP2のOSなんですが 突然ログオンしてみると プログラムで例外が発生しました タイプ NoMethodError メッセージ undefined method `+' for nil:NilClass バックトレース start_will.rb:22:in `zz_eval' start_will.rb:50:in `eval' start_will.rb:22:in `zz_eval' start_will.rb:50 と、出てきてデスクトップのアイコン、スタートメニュー、タスクバーが現れないようになりました。 タスクマネジャーから新しいタスクでIEなどのブラウザやアプリケーションは起動できるのですが(この質問もこの方法で書いています)大変、不便です。 ご教授願います

  • rubyでrequireできない

    gemを使ってmechanizeをインストール完了までいったのですが、ruby実行時にrequire 'mechanize'で落ちてしまいます。 --sample.rb-- require 'rubygems' require 'mechanize' #require 'mechanize-2.7.3' p 'OK' 結果 /home/USERNAME/.rbenv/versions/2.1.5/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- mechanize (LoadError) from /home/USERNAME/.rbenv/versions/2.1.5/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require' from sample.rb:2:in `<main>' 現在のgem listでmechanizeは出てきましたので、gemのインストールは上手くいってます。 mechanize (2.7.3) ただLOAD_PATHをみてみると、 ["/home/USERNAME/.rbenv/rbenv.d/exec/gem-rehash", "/home/USERNAME/.rbenv/versions/2.1.5/lib/ruby/site_ruby/2.1.0", "/home/USERNAME/.rbenv/versions/2.1.5/lib/ruby/site_ruby/2.1.0/x86_64-linux", "/home/USERNAME/.rbenv/versions/2.1.5/lib/ruby/site_ruby", "/home/USERNAME/.rbenv/versions/2.1.5/lib/ruby/vendor_ruby/2.1.0", "/home/USERNAME/.rbenv/versions/2.1.5/lib/ruby/vendor_ruby/2.1.0/x86_64-linux", "/home/USERNAME/.rbenv/versions/2.1.5/lib/ruby/vendor_ruby", "/home/USERNAME/.rbenv/versions/2.1.5/lib/ruby/2.1.0", "/home/USERNAME/.rbenv/versions/2.1.5/lib/ruby/2.1.0/x86_64-linux"] でgemによってインストールされたlibが /var/lib/gems/1.9.1/gems/mechanize-2.7.3/lib/ LOAD_PATHにないことが原因かもしれないですが、対処法が分からず困ってます。 どなたかご回答願いします。 尚rubyのバージョンは ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]

  • Mechanizeでgetしたpageの文字コード変換

    Mecahnizeを使ってgetしたPageのbodyに対して、 文字コード変換したところ、Pageの内容がほとんど消えてしまいます。 よって、タグのサーチやフォームの操作などで失敗してしまいます。 変換前にlinksメソッドを使うと現象が回避されるのを 発見しましたが理由がわかりません。 コードは以下のような感じです。 agent = WWW::Mechanize.new page = agent.get(url) p page #=>いろいろ表示される WWW::Mechanize::Page #lnks = page.links #=>これがないとpageの内容がおかしくなる #変数lnksは全く使っていない page.body = page.body.toutf8 # UTF8に変換 p page #=> 1回目と比較して内容がほとんどなくなっている #linksメソッドを使えば現象が起きない rubyは1.8.7 p174 i386-mswin32です。 mechanizeは0.9.3です。 nokogiriは1.4.1, 1.3.3です。 理由がわかる方、スマートな回避方法、 このコードで使い続けても問題ないか?など ご教授ください<(_ _)>

  • httpメソッドが使えない

    下記の内容のruby を実行したのですが、エラーが出てしまいます。 ---- require 'net/http' req = Net::HTTP::Get.new('/') Net::http.start('twitter.com') do |http| res = http.request(req) print res.body end ---- エラーメッセージ undefined method `http' for Net:Module (NoMethodError) ruby はver 1.8.7, 環境はMacOSX10.6.8です。 原因をご存知の方がいらっしゃいましたら、教えていただけないでしょうか? よろしくお願い致します。

    • ベストアンサー
    • Ruby
  • 【JRuby】でcgi

    JRubyでcgiをためしてみたいです。 先ずは手始めにリクエストを受けると『hello World』をレスポンスするcgiを書いてみました。 JRubyはrubyの文法でOKとのことなので、以下の様に書きました。 require 'cgi' CGI.new().out({'status'=>'OK','type'=>'text/plain'}){'hello World'} 先ずは、Webサーバに上げる前に、offline modeで試してみようと思い、 DOS窓を開いて、 >jruby cgi.rb と実行しました。実行結果を以下に記します。 >jruby cgi.rb (offline mode: enter name=value pairs on standard input) ^Z C:/Program Files/Java/jruby-1.3.1/bin/../lib/ruby/1.8/cgi.rb:1124:in `initializ _query': undefined method `join' for nil:NilClass (NoMethodError) from C:/Program Files/Java/jruby-1.3.1/bin/../lib/ruby/1.8/cgi.rb:2276: n `initialize' from cgi.rb:3 因みにrubyでの実行結果は以下でした。 >ruby cgi.rb (offline mode: enter name=value pairs on standard input) ^Z Status: 200 OK Content-Type: text/plain Content-Length: 11 hello World 仮に、jrubyのoffline modeでrubyと同じ結果が出せるようになっても、 その先、Webサーバにどのように仕込んでいくのかも知らないのですが、 jrubyでcgiを書くってことは、rubyで書くようにお手軽にはできない 物なのでしょうか?

専門家に質問してみよう