-1

Python 2.7.5 を使用して Web サイトにログインしようとしています。このサイトにログインしてから、他のいくつかのページに移動して、それらのページからテーブルを抽出する必要があります。ただし、今のところ、私の問題はサイトにログインするだけです。ログインページは次のようになります。

<form action="/session" class="text" method="post"><div style="margin:0;padding:0;display:inline"><input name="authenticity_token" type="hidden" value="xeSbOkcWd444xhHyLj82wLS62qfH72De+7lwIhWFRd4=" /></div>    <p>
    <label for="login">Username</label><br />
    <input id="login" name="login" type="text" /><br />
    <label for="password">Password</label><br/>
    <input id="password" name="password" type="password" />
    <a href="/forgot_password">(Forgotten your password?)</a>
</p>

<p>
    <input id="remember_me" name="remember_me" type="checkbox" value="1" />
    <label class="shiftedlabel" for="remember_me">Remember me</label>
</p>

<p>
    <br /><input name="commit" type="submit" value="Log in" />
</p>
</form>

この前の質問から取得した次のコードで、cookiejar、urllib、および urllib2 を使用しています。これを以下で少し変更しました。

import urllib, urllib2, cookielib

username = 'namehere'
password = 'passwordhere'

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode({'Username' : username, 'password' : password, 'Remember_me' : "1", 'commit' : 'Log in'})
opener.open('http://example.org/login.php', login_data)
resp = opener.open('http://example.org/password_protected_page')
print resp.read()

元の「ログイン データ」に 2 つのフィールドを追加しました。覚えておいて送信してください。

このコードを実行すると、パス ワード ページが印刷されますが、このページを表示するにはログインする必要があるというエラーが表示され、必要なテーブルが表示されません。ウェブサイトのこのページには .php 拡張子が存在しないことに注意してください。

関連するメモとして、この種のものに対して私が見つけた他の最も一般的な解決策は、mechanize モジュールを使用することでした。しかし、それ自体をインストールするために使用する「簡単なインストーラー」ツールをインストールできませんでした。また、これにかなり慣れていないため、問題を診断できませんでした。それは別問題だけど。

助けてくれてありがとう:)

4

1 に答える 1

2

プログラムCharlesをチェックすることをお勧めします。サーバーに送信されたデータを見つけるのに最適です。通常、後で urllib を使用して同じ要求をエミュレートするのは非常に簡単です。

あなたの場合、authenticity_token の値を POST に追加していないように見えます。「Remember me」という名前は実際には「remember_me」であり、「Username」という名前は実際には「login」です。

于 2013-06-19T23:49:00.703 に答える