从图中得知表单需要哪些数据
下面的两行代码保存cookies
session = requests.Session()
response = session.get(url, headers=headers).content
下面的代码获取表单所需数据
soup = BeautifulSoup(response, "lxml")
# 解析页面获取表单必须的数据
lt = soup.find(attrs={"type": "hidden", "name": "lt"})['value']
execution = soup.find(attrs={"type": "hidden", "name": "execution"})['value']
event_id = soup.find(attrs={"type": "hidden", "name": "_eventId"})['value']
最后还是登录失败
下面是完整代码
import requests
from bs4 import BeautifulSoup
url = 'https://passport.csdn.net/account/login'
headers = {
"Host": "passport.csdn.net",
"Referer": "https://passport.csdn.net/account/login",
"User-Agent": 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89'
' Safari/537.36',
"Origin": "https://passport.csdn.net"
}
def login(username, password):
captcha_solution = None
captcha_id = None
lt = None
execution = None
event_id = None
post_data = {
"username": username,
"password": password,
"rememberMe": "true",
}
session = requests.Session()
response = session.get(url, headers=headers).content
soup = BeautifulSoup(response, "lxml")
# 解析页面获取表单必须的数据
lt = soup.find(attrs={"type": "hidden", "name": "lt"})['value']
execution = soup.find(attrs={"type": "hidden", "name": "execution"})['value']
event_id = soup.find(attrs={"type": "hidden", "name": "_eventId"})['value']
# print(lt)
# print(execution)
# print(event_id)
# 将获取的数据加入表单
post_data['lt'] = lt
post_data['execution'] = execution
post_data['_eventId'] = event_id
# 所有参数准备完毕 开始登录
html = session.post(url, data=post_data, headers=headers)
print(type(html.cookies))
for key, value in html.cookies.items():
print(key+": "+value)
print(html.text)
# if html.url == 'https://www.csdn.net/':
# print(html.text)
# else:
# print('fail')
login('15200689458', '199704105896abc')
可以通过捉包得出, 登录url 不是https://passport.csdn.net/acc...
而是这个https://passport.csdn.net/acc...
session.post(url,data=post_data, headers=headers)
中的url 改回 https://passport.csdn.net/acc... 就可以登录