特定の Web サイトで動作するかなり単純なログイン スクリプトを取得するのに苦労しました。私のコードは別のウェブサイト (Reddit)では動作しますが、以下では動作しません:
https://eo-sso-idp.eo.esa.int/idp/umsso20/login
フォームを送信して応答を印刷した後、ローカルの HTML ファイル (コンソール出力からコピーしてメモ帳のテキスト ファイルに貼り付けた) に保存されているにもかかわらず、Web ブラウザーが「見つけられない」HTML を含むページにブラウザーが座っているように見えます。対応するフォーム フィールドにコピーされたユーザー名とパスワード。管理ページに移動する必要があるリダイレクトに従いません。
これは私のコードです:
# Create a new mechanize Browser instance
br = mechanize.Browser()
# Set browser options
br.set_handle_equiv(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_redirect(mechanize.HTTPRedirectHandler)
br.set_handle_refresh(mechanize.HTTPRefreshProcessor(), max_time=1)
# Open the login URL
br.open("https://eo-sso-idp.eo.esa.int/idp/umsso20/admin")
for link in br.links():
if link.text == "Login":
br.follow_link(link)
# Select the first form
br.select_form(nr=0)
# Enter the username and password
br["cn"] = username
br["password"] = password
# Submit the form
response = br.submit()
print response.read()
(直接ログイン ページに移動するのではなく、ログイン ページへのリンクをたどるようにブラウザーを設定した理由は、ページがログイン URL に追加される一意の文字列を生成するように見えるためです)
機械化に加えて、ツイルで次のコードを使用してみました。
browser = get_browser()
browser.go("https://eo-sso-idp.eo.esa.int/idp/umsso20/admin")
browser.follow_link("Login")
fv("1", "cn", username)
fv("1", "password", password)
submit("1")
showlinks()
しかし、このコードはエラーを生成します:
MissingSchema: Invalid URL u'/idp/umsso20/login?fn=T2dWam0zYUZLVTh5Z3dwWGNMZmlKdz09&act=NWNDNlZhNnAwaEUzbFVGV3FZaStLUT09&pars=dEN6SzZDY3hsQmtWYjNWMDhjdWRXTW1ON2FFSFFYK2JvemtXSFczMFRuRWtGQjgwOWRjVFRsQVZUVlZMeDNmd0VDM25hSkNvWGZ1NkI0NjJWcGFNY0ZaNlFSN2JqL3RFUTJYM3NIRWdvbWJGVmo1bmhGNElYV2YyY2l4NmNIcWJZeVlLN2NFYnQrTzNaS2luRzJ2UTlnPT0ie': No schema supplied. Perhaps you meant http:///idp/umsso20/login?fn=T2dWam0zYUZLVTh5Z3dwWGNMZmlKdz09&act=NWNDNlZhNnAwaEUzbFVGV3FZaStLUT09&pars=dEN6SzZDY3hsQmtWYjNWMDhjdWRXTW1ON2FFSFFYK2JvemtXSFczMFRuRWtGQjgwOWRjVFRsQVZUVlZMeDNmd0VDM25hSkNvWGZ1NkI0NjJWcGFNY0ZaNlFSN2JqL3RFUTJYM3NIRWdvbWJGVmo1bmhGNElYV2YyY2l4NmNIcWJZeVlLN2NFYnQrTzNaS2luRzJ2UTlnPT0ie?
フォームの POST メソッドが、実際には URL ではない場所にブラウザを送信しようとしているようです。
どんな助けでも大歓迎です