リクエストを使用してウェブサイトにログインしようとしていて、壁に当たっているようです。アドバイスをいただければ幸いです。Pythonのリクエストを使用してログインする
ログインページがhttps://www.economist.com/user/login
で、ログインフォームの属性がaction="https://www.economist.com/user/login?destination=%2F"
の場合、economist.comにログインしようとしています(理由はありません。ユーザー名とパスワードが必要です)。 Chromeデベロッパーツールを使用して
は、次のようにログイン要求のためのフォームデータは次のとおりです。
name: /////////
pass: ////////
form-build-id: form-483956e97a61f73fbc0ebf06b04dbe3f
form_id: user_login
securelogin_original_baseurl: https://www.economist.com
op: Log in
私のコードは、ログインページを取得し、form_idを決定するためにBeautifulSoupを使用しています。ユーザー名とパスワード、取得したform_id、およびその他の隠し変数を使用してログインにPOSTを試みます。その後、バナーは、私が実際にログインしているかどうかを判断するには、ログインまたはログアウトのリンクを持っているかどうかを確認するためにホームページをチェックするためにBeautifulSoupを使用しています
コードを次のとおりです。
import requests
from bs4 import BeautifulSoup
# Setting user agent to a real browser instead of requests
headers = requests.utils.default_headers()
headers.update(
{
'User-Agent': 'Mozilla/5.0',
}
)
# create a session and login
s = requests.Session()
login_page = s.get('https://www.economist.com/user/login', headers=headers)
login = BeautifulSoup(login_page.text, 'lxml')
form = login.select_one("form > div > input")
payload = {
'name' : '////////////',
'pass' : '////////',
'form_build_id' : form['value'],
'form_id' : 'user_login',
'securelogin_original_baseurl' : 'https://www.economist.com',
'op' : 'Log in'
}
response = s.post("https://www.economist.com/user/login?destination=%2F",
data=payload, headers=headers)
# check homepage banner to see if login or logout link is there
url = "https://www.economist.com/"
r = s.get(url, headers=headers)
soup = BeautifulSoup(r.text, 'lxml')
banner = soup.select("div > div > span > a")
for table_row in banner:
print(table_row['href'])
実行し、このコードバナーはログアウトリンクの代わりにログインリンクを持っていることを示しています。これはログインしていないことを意味します。私はここで非常に簡単な間違いをしているに違いないが、私はどこに行くのか分からない。私はこの仕事をするためのアドバイスを感謝します。
おかげにリダイレクトされます。これは機能します。私は自分の「フォーム」が機能していたと思いますが、あなたのフォームははるかに破壊されにくいフォームです。私はすべての問題は私がログインしているかどうかを確認するための泥沼のテストだったと思います。あなたのものははるかにエレガントです(/アクティベーションは私を/うれしい場所にリダイレクトしますが、前提は同じです)。 – argent656