这是我的第一个编码项目,因此我可能不正确理解所有术语。我正在尝试使用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 = "[email protected]"
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)
请注意,我尚未使用有效的帐户测试以上代码
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句