Ruby mechanizeでログインできない

このQ&Aのポイント
  • Rubyのmechanizeでhttps://login.ocn.ne.jp/auth/s2016/pc/AuthLoginDisplay.actionにアクセスできません。
  • agent.getメソッドを使ってアクセスしましたが、システムエラーが発生し、ログインページが表示されません。
  • アクセス先のURLが.actionで終わっているため、アクセスできない可能性があります。
回答を見る
  • ベストアンサー

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
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

お書きのURLにブラウザからアクセスしても、同じく「システムエラー」という画面が出ますので、 プログラムはそれを正常に取得していると思われます。 URLがおかしいのでは? 一連のセッションの途中から入ろうとしているように見えますが。 ブラウザでできないことは、Mechanizeにもできません。

rodoni
質問者

お礼

確かにそうですね。 一度正規の方法でこのページに行っていると、 ブラウザを再起動するまではURL直打ちでいけるので 見落としていました。 どうもありがとうございます。

その他の回答 (1)

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

No1です。 >一度正規の方法でこのページに行っていると、 >ブラウザを再起動するまではURL直打ちでいけるので やはりそういうことですか。 クッキーを削除して起動し直したブラウザでやるのと同じページから手でやるのと同じ手順で、Mechanizeでも処理してください。

関連する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
  • Rubyのmechanizeを利用したファイルダウンロードの自動化について

    初めて質問します。よろしくお願いいたします。 Rubyのmechanizeを利用し、form内のダウンロードボタンを クリックして、ファイルをダウンロードする処理を記載したい のですが、ファイルをローカルマシンに保存する方法がわかりません。 ご存知の方がいらっしゃいましたら、ご教授頂ければと思います。 よろしくお願いいたします。 ↓↓↓以下、コードです。↓↓↓ require 'rubygems' require 'mechanize' require 'kconv' #初期設定 fname = 'test.csv' csv_file = File.open(fname,'w') # インスタンス生成 agent = WWW::Mechanize.new # User-Agentの設定 agent.user_agent_alias = 'Windows IE 6' # ページ取得 site_login = agent.get('https://***.php') # フォームを探す search_form = site_login.forms.with.name('login').first # テキストボックスにデータを入力 search_form['f[EMAIL]'] = 'userid' search_form['f[PASSWORD]'] = 'password' # フォームのsubmitボタンを押す site_top = agent.submit(search_form) # リンクをたどる site_top_link = site_top.links.text('ダウンロード') site_next = agent.get(site_top_link.href) # フォームを探す search_next_form = site_next.forms.with.name('myform').first # データを入力? search_next_form['from'] = '1' search_next_form['from_date[from_Year]'] = '2007' search_next_form['from_date[from_Month]'] = '03' search_next_form['from_date[from_Day]'] = '02' search_next_form['to'] = '1' #↓↓ここをどう書けばよいかで悩んでいます。。。とりあえずこのままでは期待したデータは取れておりません。 ## フォームのsubmit(ダウンロード)ボタンを押し、取得したデータをファイルに保存 #csv_file.puts agent.submit(search_next_form) #↑↑ここをどう書けばよいかで悩んでいます。。。とりあえずこのままでは期待したデータは取れておりません。 csv_file.close

  • WWW::Mechanizeについて教えてください

    WWW::Mechanizeついて 質問させて頂きます。 他でも質問しておりますが、回答が無かったためマルチですがご了承ください。 WWW::Mechanizeを使ってログインしようとしてるのですが、うまく行きません。 <form action="login.cgi" name="form1" method="post"> <input id=id name='id' type='text' /> <input id=pass name='pass' type='text' /> <input type="submit" name="submit" value="LOGIN" /> 上記のフォームでは正常に取得できます。 しかし、ログインチェックをJavascriptからPHPに渡ってるページでの ログインがうまく行きません。 ソース //入力チェック /*login_checkたとえです*/ function LOGIN(){ $( "userid" ).className = ""; $( "userpassword" ).className = ""; if( login_check( "id" ) ){ if( login_check( "pass" ) ){ document.form1.action = "login.php"; document.form1.Btn_Type.value = "login"; document.form1.submit(); }else{ $( "pass" ).className = "error"; } }else{ $( "id" ).className = "error"; } } <form action="login.php" name="form1" method="post"> <input id=id name='id' type='text' /> <input id=pass name='pass' type='text' /> <input type="button" name="loginbtn" value="LOGIN" onclick='JavaScript:LOGIN();'/> 上記のフォームにログインしようと下記のようにしました。 my $loginUrl = 'http://hoge.jp/login.php'; my $mech = WWW::Mechanize->new(cookie_jar => $cookie_jar); $mech->agent_alias('Windows IE 6'); $mech->get($loginUrl); $mech->form_name('form1'); $mech->field( id => "test" ); $mech->field( pass => "test" ); $mech->click_button( value => 'Login' ); print $mech->content(); これで実行するとエラーがでます。 Can't call method "header" on an undefined value at /usr/lib/perl5/site_perl/5.8.8/WWW/Mechanize.pm line 2471. $mech->click_button( value => 'Login' ); 上記のclick_buttonでvalueを指定するとエラーになります。 WWW::MechanizeはJavascriptは実行できないのでしょうか? お知恵をお貸しいただけませんでしょうか。 説明不足かもしれませんがお願い致します。

    • ベストアンサー
    • Perl
  • Ruby Mechanizeを使う事でサーバに負担を与える可能性はありますか?

    RubyのMechanizeを使い、欲しいページを取得するプログラムを書きました。 おおまかな手順としては、 (1)あるページに接続し、#page=agent.get('http://www.hoge.com') (2)フォームにID,PASSを入力し、submitボタンをクリックしてログイン。 (3)ログイン後のページに移動し、指定したページをローカルに保存。 ループ処理は行っていません。 プログラムが最後まで実行されたので問題は無いと思うのですが、サーバに負担を与える可能性はあるでしょうか? 自分のIDで証券会社のページに接続し、欲しいデータを取得するプログラムなので、不具合があってはいけないと思い質問させてもらいました。 宜しくお願いします。

  • プライバシーポリシー等のひな形

    お世話になります。 ある機関のHPを作成しています。 プライバシーポリシー、リンク、免責事項、著作権について記載するように指示を受けています。 記載の際には、公的な指針等にあるひな形等から作成するように、と指示を受けております。 プライバシーポリシー、リンク、免責事項、著作権についてHPに注意事項等を記載する場合のひな形(公的指針)があれば教えて下さい。

  • web.xmlの記述

    web.xmlに次の記述をしていると、normal権限のユーザでログインするとHTTP Status 403に飛んでしまいます。 ~ <security-constraint> <web-resource-collection> <web-resource-name>Certification Area for admin</web-resource-name> <url-pattern>/f.html</url-pattern> <url-pattern>/a.html</url-pattern> <url-pattern>/c.html</url-pattern> <url-pattern>/n.html</url-pattern> <url-pattern>/s.html</url-pattern> <url-pattern>/サーブレット</url-pattern> ~ </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </security-constraint> <security-constraint> <web-resource-collection> <web-resource-name>Certification Area for normal</web-resource-name> <url-pattern>/f.html</url-pattern> <url-pattern>/s.html</url-pattern> <url-pattern>/サーブレット</url-pattern> ~ </web-resource-collection> <auth-constraint> <role-name>normal</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/auth.html</form-login-page> <form-error-page>/error.jsp</form-error-page> </form-login-config> </login-config> ~ 環境 WindowsXP Home Edition Tomcat4.1.36 MySQL4.0.26 mysql-connector-java-3.1.13-bin.jar 検索もしていますが、どれも解決に結びつきません。 原因、解決法が分かる方は、ご教示ください。

  • UTF-8で構築したサイトのsessionエラー

    pearとAuthを使ったサイトを構築中です。 ページ遷移時に、ログイン情報を保持することを考えました。 対策としては、「Authに保存されたログイン情報を読みに行くソースを"login_check.php"の外部ファイルに保存」しました。 そして、ログインページ以外のページでは"login_check.php"をrequire_onceで読みに行く形としました。 各ページ(ログインページ以外)のPHPの記載開始部分は下記の通りです。 <?php require_once "Auth.php"; require_once "login_check.php"; ************************************** login_check.php は下記となります。 ************************************** <?php session_start(); $myAuth=new Auth("DB", $params, "loginFunction"); $myAuth->start(); if ($myAuth->getAuth()){ header("id=$id".SID); }else{ print("認証されていません"); } ?> ********************************** 【トラブル】 このやり方で、S_JISで構築したページは問題なく表示されるのですが、UTF-8Nで構築したページでは下記のエラーが出ます。 不要なスペースが無いかは全て見直しました。UTF-8Nあり、BOMはありません。また改行コードもLFです。 殆どの方の同様のトラブルはBOM無しで解決しているようですが、私のはBOM無しでも発生します。ob_start(); を<?phpの直下につけても駄目でした。 S_JISでは問題なく動くだけになんとかしたいです。 アドバイス頂けましたら幸いです。 宜しくお願い致します。 エラー内容 Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/xxx.com/public_html/index33.php:6) in /home/centro-lars.com/public_html/login_check.php on line 3 Warning: Cannot modify header information - headers already sent by (output started at /home/xxx.com/public_html/index33.php:6) in /home/centro-lars.com/public_html/login_check.php on line 7

  • アクセス解析について

    現在、SEO対策の会社へHPアクセス解析を依頼しています。 アクセスログの報告をもらっているのですが、 中に、下記のようなリンク元があるのですが、 ----------------------------------------- ホスト名:msnbot-(--そのつど違う数字-----).serch.msn.com ユニークアクセスキー:そのつど違います リンク元:http://serch.live.com/results.aspx?q=copyright USER_AGENT:Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5..2;SV1;.NET CLR 1.1.4322) ACCEPT_LANGUAGE:en-us ディスプレー解像度:800x600x16 ----------------------------------------- となって、HPへアクセスしてきています。 表示しているページは、違うものを見ているようです。 これは、一般の方からのアクセスなのでしょうか? それとも、業者からのアクセスなのでしょうか? 現在依頼している会社からは、分からないとの回答しか いただけないので、実際のアクセス数の把握が出来ず 困っています。 どなたか、分かる方いましたら是非教えていただきたいのですが 宜しくお願い致します。

    • ベストアンサー
    • SEO
  • サイト上の文書の法的効力について

     最近、インターネット上での取り引き増加に伴い、サイト上にプライバシーポリシー、サイトポリシーなど各種規約が表示されていることが多くなってきました。これに関連し、教えて頂きたいことがあります。  サイト上に表示されているポリシー類は、実際にサイト利用者との間で契約を交わしているのではなくサイト提供者が一方的に表示しているものですが、これを第三者が違反した場合、法的拘束力を発揮するでしょうか?  例えばサイト上の情報の流用など著作権に関わることであれば、サイト上に表示する、しないに関わらず著作権法によって保護されると思うのですが、その他リンクについての取り決めなど、サイト提供者の都合によるものに関しても法的効力を持つのでしょうか?  できれば、関係する法律についても教えて頂ければと思います。よろしくお願いします。

  • Rubyでの条件分岐について

    登録フォームについての質問です。 ログイン用フォームのhome.cgi と、それにリンクするユーザー登録用フォームのregistration.cgi があり、今回質問するのはユーザー登録用のregistration.cgiの方です。そしてユーザーIDとPasswordはdata.txtに書き込んでいます。書き込み自体は成功するのですが、それ以外のところで問題がでている状態です。条件分岐がうまくいきません。 下記のように書いた時におこる問題点等について教えていただきたいと思います。 (1)IDとPassword のinput に値が空の時に、ボタンを押しても、登録完了しました と表示されてしまうので、この様な場合は、"もういちど確認してください" などの警告文を出したいです。 (2)IDとPassword の文字数に制限を入れたいのですが、分かりませんでした。 双方とも4文字以上8文字以下にしたいです。それ以外の場合は、条件分岐で、"文字数を確認してください"などの警告文を出したいです。 -------- < ここから registration.cgi >-------------------- #!/usr/bin/ruby require "cgi" cgi = CGI.new puts <<HTML Content-Type: text/html <html> <head> <title>練習問題</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <h1>練習(1)</h1> 登録フォーム <form action="registration.cgi" method="post"> ユーザーID:<input type="text" name="login" ><br> パスワード:<input type="text" name="password"><br> <input type="submit" value="submit"> </form> HTML if cgi.params["login"][0] then f = open("data.txt","a") f.puts"%s:%s" %[cgi.params["login"][0],cgi.params["password"][0]] f.close puts "登録完了しました" else end puts <<HTML <br> <a href="./home.cgi">戻る</a> HTML -------- < ここまで >--------------------

    • ベストアンサー
    • Ruby