1

この Python スクリプトは正しいですか?


import urllib, urllib2, cookielib 

username = 'myuser' 
password = 'mypassword' 

cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
login_data = urllib.urlencode({'username' : username, 'j_password' : password}) 
opener.open('http://www.example.com/login.php', login_data) 
resp = opener.open('http://www.example.com/hiddenpage.php') 
resp.read()

このスクリプトはHEREで見つかりました。これは、最初に Web ページにログインし、Cookie を取得して保存し、同じ Web サイト内の他のページを開くために使用することを目的としています。この方法で eBay アカウント (URL はhttps://signin.ebay.com/ws/eBayISAPI.dll?SignIn ) にログインし、eBay アカウント (URL はhttp:/ /my.ebay.com/ws/eBayISAPI.dll?MyEbay&gbh=1 ) .

したがって、このスクリプトで使用する必要がある値は次のとおりです。

最初の (サインイン) URL: https://signin.ebay.com/ws/eBayISAPI.dll?SignIn

2 番目の URL: http://my.ebay.com/ws/eBayISAPI.dll?MyEbay&gbh=1

eBay での私のログイン名:tryinghard

eBay での私のパスワード:gettingsomewhere

これらすべての新しい値を使用すると、上記のスクリプトは次のようになります。


import urllib, urllib2, cookielib 

username = 'tryinghard' 
password = 'gettingsomewhere' 

cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
login_data = urllib.urlencode({'username' : username, 'j_password' : password}) 
opener.open(https://signin.ebay.com/ws/eBayISAPI.dll?SignIn', login_data) 
resp = opener.open(http://my.ebay.com/ws/eBayISAPI.dll?MyEbay&gbh=1') 
resp.read()

それが正しいか?login_data =行 (下から 4 番目の行)が特に疑わしいのですj_passwordが、単に ではなく があるのはなぜpasswordですか?

これらすべての値でこのスクリプトを試しましたが、うまくいきませんでした。私の場合、なぜそれがうまくいかないのか誰か知っていますか?

eBay アカウントにログインして、外部モジュールとして twill を使用する python スクリプトを実行することで、そこにある他のページをチェックする方法を既に学習しましたが、コマンド プロンプトからそのスクリプトを実行した場合にのみ成功しました。または Python シェルから。「Google App Engine」からダウンロードした「 Google App Engine Software Development Kit」でそのスクリプトを実行しようとしたところ、うまくいきませんでした。

後で、「Google App Engine」が外部モジュールを好まないため、成功しなかったとここで言われました。そのため、このスクリプトを見つけました。最初にインポートするモジュール ( urlliburllib2cookielib ) はすべて組み込みモジュールです。

4

1 に答える 1

3

URLを指定したログインページの単純な「ソースを表示」すると、次の詳細が非常に簡単に明らかになります...(読みやすくするためにHTMLを最小限にフォーマットするだけです):

<span style="display:-moz-inline-stack" class="unl">
  <label for="userid">User ID  </label></span>
<span><input size="27" maxlength="64" class="txtBxF"
       value="" name="userid" id="userid"></span></div>
<div><span style="display:-moz-inline-stack" class="unl">
  <label for="pass">Password  </label></span>
<span><input size="27" maxlength="64" class="txtBxF"
       value="" name="pass" id="pass" type="password"></span>

一目でわかるように、重要な入力フィールドの名前は、お使いのように and ではなく、and です。したがって、コードが現在の状態で機能することは明らかに不可能です。usernamej_passworduseridpass

ページをもう少し読むと、すぐに次のこともわかります。

<input type="checkbox" name="keepMeSignInOption" value="1" id="signed_in"></b>
<span class="pcsm"><label for="signed_in"><b>Keep me signed in for today.</b>

ほとんどの場合、使用可能な Cookie を取得するには、そのチェックボックスが選択されていることをシミュレートする必要があります (少なくとも、つかの間の時間以外は;-)。

などなど、本当に -- 使用する実際の ID と名前を取得するためにそのページのソースを読む手間をかけずにページとの対話を自動化しようとする試みは、人生や宇宙に対する非常に楽観的な態度を明確に示しているように私には思えます。そしてすべて...;-)。ちなみに、このようなやり取りを簡素化するために (ソースを熟読した;-)、mechanize が非常に便利であることがわかりました (そして、あなたが行っているように、標準ライブラリだけでハックしようとするよりも堅牢です)。

また、サイトとの自動インタラクションの前に、常にrobots.txtをチェックして、利用規約に違反していないことを確認してください。サイトは、「人間」ではなく「ロボット」(自動インタラクション) を簡単に識別し、報復することができます。禁止、ブラックリストへの登録、さらに悪いことに、robots.txt 違反に対して。あなたは本当にそれに遭遇したくありません;-)。

于 2010-09-04T15:07:41.393 に答える