首页 > 解决方案 > 使用 Python-Requests 提交登录表单时遇到问题(200 响应但预期 302)

问题描述

我正在尝试使用 Python 请求登录网站。我的设置是:

headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'content-type': 'application/x-www-form-urlencoded',
'origin': 'https://www.naturalpartners.com',
'referer':'https://www.naturalpartners.com/us/account/login.jsp',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'}

payload = {'_dyncharset': 'UTF-8',
'_dynSessConf': '',
'/atg/userprofiling/ProfileFormHandler.flowName': 'B2B',
'_D:/atg/userprofiling/ProfileFormHandler.flowName': ' ',
'/atg/userprofiling/ProfileFormHandler.loginSuccessURL': '/us/index.jsp?',
'_D:/atg/userprofiling/ProfileFormHandler.loginSuccessURL': ' ',
'/atg/userprofiling/ProfileFormHandler.loginErrorURL': '/us/account/login.jsp?',
'_D:/atg/userprofiling/ProfileFormHandler.loginErrorURL': ' ',
'/atg/userprofiling/ProfileFormHandler.value.login': '__UsernameHidden__',
'_D:/atg/userprofiling/ProfileFormHandler.value.login': ' ',
'/atg/userprofiling/ProfileFormHandler.value.password': '__PasswordHidden__',
'_D:/atg/userprofiling/ProfileFormHandler.value.password': ' ',
'/atg/userprofiling/ProfileFormHandler.login': 'Sign In',
'_D:/atg/userprofiling/ProfileFormHandler.value.login': ' ',
'_DARGS': '/us/account/login.jsp'}

我执行登录的代码是:

from requests_html import HTMLSession

session = HTMLSession() #new session
url = 'https://www.naturalpartners.com/us/account/login.jsp?_DARGS=/us/account/login.jsp'
r = session.get('https://www.naturalpartners.com/us/account/login.jsp', headers = headers) #get login page
dyn = r.html.xpath('//input[@name="_dynSessConf"]/@value')[0] #store _dynSessConf
payload['_dynSessConf'] = dyn #assign to payload
headers['cookie'] = r.headers['Set-Cookie'] #attempt to set cookie value
post = session.post(url, data = payload, headers=headers)

我的问题是我收到 200 响应,而不是 302 表示登录成功。该帖子似乎正在使用用户名和密码完成表单,但实际上并未提交。所以登录实际上并没有发生。我不确定我错过了哪一步。谢谢

标签: pythonpython-requests

解决方案


推荐阅读