フォームに入力してリダイレクトを処理できる Python ライブラリを使用したいと思います。
- 「ホームページ」にはフォームがあります
{'username':'user', 'password':'pass'}
- 「リダイレクト」ページで新しいページに移動
- 「新しい」ページには最終ページへのリンクがあります
- 「最終」ページにはフォームがあります
{'Field 1':'Data 1', 'Field 2':'Data 2'}
「最終」ページに移動して、フォームに記入したいと思います。SO のpython-requestsのすべての投稿に目を通し、API ドキュメントとユーザーガイド全体を読みました。
mechanize を使用して「ホーム」ページのフォームに記入することができました。
import mechanize
# Fill out Log In form
br = mechanize.Browser()
br.open('http://www.yourfavoritesite.com')
br.select_form(nr=0)
br['username'] = 'user'
br['password'] = 'pass'
br.submit()
さらに、ウェブページのリダイレクトを無効にした後、mechanize を使用して「新しい」ページ フォームに入力できるようになりました。
# Click link
br.find_link(text='Admin')
req = br.click_link(text='Admin')
br.open(req)
# Fill out Final form
br.select_form(nr=0)
br['Field 1'] = 'Data 1'
br['Field 2'] = 'Data 2'
br.submit()
リダイレクトを無効にせず、ページがリダイレクトされると、「新しい」ページに移動できず、フォームに入力しようとすると次のエラーが発生します。
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/mechanize/_mechanize.py", line 524, in select_form
raise FormNotFoundError("no form matching "+description)
mechanize._mechanize.FormNotFoundError: no form matching nr 0
Python Requests は非常にシンプルであると聞いたので、次のようなことができると仮定して、このライブラリを使用したいと思います。
import requests
# Fill out Log In form
data = {'username':'admin', 'password':'pass'}
r = requests.get('http://www.yourfavoritesite.com', allow_redirects=True)
r = requests.put(r.url, data=data)
# Follow redirect to "new" page
# Click link
# I haven't heard of this feature in requests
# Fill out Final form
data = {'Field 1':'Data 1', 'Field 2':'Data 2'}
r = requests.put(r.url, data=data)