抓取“ __hpKey”的网站,然后在python中使用请求和beautifulsoup登录

斯图尔特

这是我的第一个编码项目,因此我可能不正确理解所有术语。我正在尝试使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章