[英]scraping website for '__hpKey' and then logging in using requests and beautifulsoup in python
這是我的第一個編碼項目,所以我可能沒有掌握所有的術語。 我正在嘗試使用 python 中的請求和 BeautifulSoup 庫登錄 NHS 獻血網站。 我設法做到了這一點,但它僅在我使用從瀏覽器網絡選項卡的登錄標題中復制並粘貼的“__hpKey”值時才有效。 我希望能夠抓取網站以找到此令牌,而不必使用我復制和粘貼的令牌。
我設法找到了“__hpKey”,但在嘗試登錄時,這個鍵似乎不起作用。
s = requests.session()
soup_key = BeautifulSoup(s.get('https://my.blood.co.uk/Account/SignIn').content, 'html.parser')
key = soup_key.find('input', {'name': '__hpKey'})['value']
我剛剛將網絡登錄選項卡中的值放在“密鑰”所在的位置,因為使用上面的代碼沒有成功登錄。 我已經縮小了需要通過登錄門戶的四個元素。 這些是:
data = {
'LoginEmailAddress': 'email',
'LoginPassword': 'password',
'Question-Reason': '',
'__hpKey': 'key' ## 'key' is a 216 character key ending in ==
然后,我將這 4 個元素傳遞到登錄門戶,並使用 BeautifulSoup 解析帶有我的捐助者資料的網頁標題。 標題讓我知道它是否已成功登錄。
login_req = s.post('https://my.blood.co.uk/Account/Login', data=data)
soup = BeautifulSoup(s.get('https://my.blood.co.uk/Home/Landing?load=Yourdonations').content, 'html.parser')
print(soup.title) # If logged in prints "My Donor Record", else prints "My Donor Record - Sign in or Register"
那么,我如何找到一個在傳遞到登錄門戶時有效的“__hpKey”值?
謝謝
請求中包含一些驗證字段。 這些字段位於表單的隱藏input
標記中。 最快的方法是獲取表單下的所有輸入並按有效負載中的方式發送所有輸入:
import requests
from bs4 import BeautifulSoup
s = requests.Session()
email = "your@email.com"
password = "your_password"
r = s.get("https://my.blood.co.uk/Account/SignIn")
soup = BeautifulSoup(r.text, "html.parser")
form = soup.findAll("form")[1]
payload = dict([
(t["name"],t["value"])
for t in form.findAll("input")
if t.has_attr("value")
])
payload["Type-Fax"] = "" # maybe not necessary ?
payload["LoginEmailAddress"] = email
payload["LoginPassword"] = password
print(payload)
r = s.post("https://my.blood.co.uk/Account/Login", data = payload)
soup = BeautifulSoup(s.get('https://my.blood.co.uk/Home/Landing?load=Yourdonations').content, 'html.parser')
print(soup.title)
請注意,我沒有使用有效帳戶測試上述代碼
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.