WWW::Mechanizeでfc2にログインする方法

このQ&Aのポイント
  • WWW::Mechanizeを使用してfc2ブログの管理画面にログインできない問題が発生しています。
  • ログイン情報を正しく入力しても管理画面に遷移しない問題があります。
  • ログインの成功を確認するためには、他の項目にも注意する必要があります。
回答を見る
  • ベストアンサー

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

  • guny
  • お礼率50% (3/6)
  • Perl
  • 回答数4
  • ありがとう数8

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

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

rubyですが、ユーザーIDのフィールド名を’email’ではなく’id’にするとうまくいきました。

guny
質問者

お礼

フィールド名を'id'にしたら上手くいきました! ありがとうございます。 助かりました!!

その他の回答 (3)

noname#118314
noname#118314
回答No.3

確認してないので勘ですが、Cookieということはないですかね? my $mech = WWW::Mechanize->new(cookie_jar => {});

guny
質問者

補足

ご回答ありがとうございます。 Cookieのことは意識していませんでした。 しかし試してみたところ、同じ結果(ログインできず)でした。

  • YkazubonY
  • ベストアンサー率30% (26/86)
回答No.2

普通、ログイン先のURLは、ApacheのBASIC認証とかDigest認証とかでアクセス制限されていると思います。 フォームパラメータをサーバーに送っただけでは、Apacheの認証は通過出来ないと思いますよ。 というより、そういう風に設計されていると思います。

guny
質問者

補足

ご回答ありがとうございます。 WWW::Mechanizeでmixiへはログインできるようです。 http://e8y.net/mag/007-www-mechanize/#EXAMPLES mixiが特殊なのでしょうか?

回答No.1

$mech->submit_form( form_number => 1, fields => { email=> [ユーザID], pass => [パスワード], }, ); とするとどうなりますか?

guny
質問者

お礼

ご回答ありがとうございます。 試してみましたが同じ結果(ログインできず)になりました。

関連するQ&A

  • 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
  • Perl WWW::Mechanize

    恐れ入ります。WWW::Mechanizeを使って下記のサイトにアクセスしようとしても開くことが出来ません。業務上自動化したい部分があるのですが、画面が開かず、ロード中のままで開かない状態です。その他のサイトでは開くことが可能です。よろしくお願いいたします。 $url[0] = "https://salonboard.com/"; ← 開かない $url[1] = "https://www.google.com"; ← 開く my $mech = WWW::Mechanize->new( agent=>"Mozilla/5.0 (Windows NT 10.0; Win64; x64) " ); my $response = $mech->get( $url[0] ); print "Content-type: text/html;\n\n"; print $mech->content;

    • ベストアンサー
    • Perl
  • WWW::Mechanizeがプロシキ経由になってしまう

    WWW::Mechanizeを使って診断君にアクセスすると判定結果が「判定:プロクシです proxy判定箇所が 1箇所、疑惑点が 2箇所ありました。」と出てしまうのですが #$mech->proxy('http', $proxy);の部分をコメントにしているのにどうしてでしょうか? 何方か教えてもらえませんか? ___________________ #!/usr/bin/perl use lib "lib"; use LWP::UserAgent; use WWW::Mechanize; $proxy = "http://xxxx.xxxx.jp:80"; $site = "http://www.taruo.net/e/"; my $mech = WWW::Mechanize->new(); #$mech->proxy('http', $proxy); $mech->add_header( Referer => 'http://www.yahoo.co.jp', Proxy-Connection => 'Keep-Alive', Connection => 'Keep-Alive', USER_AGENT => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)', ACCEPT => 'image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,image/pnp,*/*', ACCEPT-CHARSET => 'iso-8859-1,*,utf-8', ACCEPT_LANGUAGE => 'ja', ACCEPT_ENCODING => 'gzip,deflate', Content-Type => 'application/x-www-form-urlencoded', Content-Length => '100', HOST => 'www.taruo.net', HTTP_CONNECTION => 'Keep-Alive', ); $mech->post("$site"); $html = $mech->content; print "Content-type: text/html;\n\n"; print<<endend; $html endend exit;

    • ベストアンサー
    • Perl
  • 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
  • Mechanizeにおけるボタンクリックについて

    Perl Mechanizeを使って、下記HTMLの"表示"と表示されているボタンを押したいのですが、いろんなパターンを利用しても押せません。処理後の$mechのコンテンツをテキストで見ると、処理前後で更新(html遷移)がありません。試した、パターンは以下です。ActivePerl Verは5.8.8、OSはWindows XP SP2、mechanizeはver0.72です。 また、$mech->click_button('value' => '表示');を使うため、mechanizeをPPMを使ってver1.54にUpdateすると、 「Can't call method "header" on an undefined value at C:/Perl/site/lib/WWW/Mechanize.pm line 2347.」 というエラーがでて、click_button()のところでストップします。Mechanize.pmでuseしている各種パッケージをUpdateしても同様なエラーが出てclick_button()のところでストップします。 下記対象htmlのボタンを押すにはどうしたらよいでしょうか?皆様、よろしくお願いします。 1.パターン1 $mech->submit_form(  form_number => '1',   fields => {    0 => "1",    1 => "2",   }, ); 2.パターン2 $mech->submit_form(  form_number => '1',   fields => {    0 => "1",    1 => "2",   },  button => '' ); 3.パターン3 $mech->form_number(1); $mech->field( 0, 1 ); $mech->field( 1, 2 ); $mech->click(); 4.パターン4 $mech->form_number(1); $mech->field( 0, 1 ); $mech->field( 1, 2 ); $mech->submit(); 5.対象html <html><head><title>タイトル</title></head><body> ■中タイトル1<br><br><form action="/URL" method="post"><input type="hidden" name="NAME" value="ABCD"> [小タイトル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> [小タイトル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="表示"></form> <hr>該当データなし。<br><hr>

    • ベストアンサー
    • Perl
  • Perl/TkのWWW::MechanizeのGET失敗時の動作

    WindowsにてPerl/Tkを使用しております。 WWW::MechanizeのGETを使って(おそらく)404 not foundを受信した後の動作の制御の仕方がわかりません。 下記ソースを実行して貰うとわかると思うのですが、 GETが失敗したら即sub関数内をreturnしてしまいます。 #!/usr/bin/perl use Tk; use Encode; use WWW::Mechanize; my $mech = new WWW::Mechanize(autocheck => 1); my $main = MainWindow->new; $main->Button(-text=>decode("cp932",'取得'),-font => ["MS ゴシック", 12], -command => \&get_source) ->grid(-row=>0,-column=>0); my $list = $main->Listbox(-selectmode=>'single',-font => ["MS ゴシック", 12]); $list->grid(-row=>1,-column=>0,-sticky=>'ew'); MainLoop; sub get_source{ my $uri = "http://www.google.co.jp/abcd"; $mech->get($uri); print "get_source end\n"; } 上記の「print "get_source end\n";」は実行されません。 データ取得先サイトがメンテナンス中は404になるようで困っています。 イメージでは「$mech->get($uri) or die "get_source error";」みたいな感じにエラーの場合の時の処理を記述したいのです。 ご存知の方いましたらご教示願います。 使用環境 ・Windows XP Professional SP3 ・Active Perl v5.8.6 for MSWin32-x86-multi-thread build811 ・自作PC(CPU:Athlon 64 3800+)

    • ベストアンサー
    • Perl
  • FC2ブログの初めのログインで困っています

    FC2ブログの初めのログイン画面で 登録メールアドレスを入力が出てきますね。運がよければブログIDどちらでも(登録メールアドレス)入力の画面が出てきます。 私のあるFC2ブログはブログIDだけわかり、登録メールアドレスがわかりません。今度、ブログの設定を見たときに登録メールアドレスは必ず控えます。 大概のFC2ブログのログインページには登録メールアドレスとパスワードの入力画面しか出てきません。 運よく、FC2ブログのログインページで登録メールアドレスまたはブログIDとパスワードの入力画面を出すにはどうしたらよろしいでしょうか?

  • FC2ブログを携帯で

    FC2ブログを利用しているのですが、プライベート設定(閲覧のパスワード認証があります)にすると携帯から閲覧の際にもパスワードの入力を求められます。 PCからの時には設定したパスワードを入力すれば閲覧できるのですが、私の携帯からパスワードがはじかれて(パスワードが違います)しまいます。(入力ミスではないと思います。) それと同時にですが以前もFC2は利用した時があったのですが、その当時はFC2のトップ画面(PC)からログインしていました。 そして今はそのトップ画面からのログインもはじかれてしまい、ブックマークしている自分のブログのトップ画面(パスワード認証の画面)又はFC2IDの画面からメールアドレスとパスワード(FC2IDの方のです)を入力してブログの管理画面にアクセスしています。 今回の携帯からのアクセスができないのは、このFC2IDが何か関連しているでしょうか? 携帯から見れないのと同時にブログ管理画面までたどりつくのにとても面倒(FC2ID画面からメールアドレスを入力)で、なぜFC2のトップ画面からもログインできないのかも解りません。 何か設定や登録が、うまくできていない不具合なのでしょうか?? FC2に詳しい方、お願いします(泣)

  • ログインについて

    Webサイトを作りたいのですが、まずログイン画面からユーザーID、パスワードを入力する際に、管理者用のユーザーIDと、それ以外(一般ユーザー)のユーザーIDを分けたいと考えています。そこで、例えば管理者用のユーザーIDでログインした時、次のメインメニュー画面で、管理者用の項目が出るようにする。ユーザー用のユーザーIDでログインした時であれば、次のメインメニュー画面で、ユーザー用の項目が出るようにする。というように、管理者か一般ユーザーかによって次のメインメニューの項目を別々にしたいのです。 やりたい事としては、 ・メインメニュー画面は1つのASPファイルで出来るようにする。 ・ログイン画面からメインメニュー画面にユーザー情報を渡したい ・HTML・スクリプト等の記述方法 どなたか詳しい方、お願い致します。

  • 急にFC2にログインできなくなってしまいました。

    急にFC2にログインできなくなってしまいました。 FC2 IDのサイト(id.fc2.com/)にログインしたのですが、そちらでも COOKIE(クッキー)が無効になっている可能性があります。ブラウザーの設定を確認してください。 と出てしまいます。 よろしくお願いします。 ちなみに、別のパソコンではログインできます。

専門家に質問してみよう