请求协助:使用Python实现网站自动登录
网站自动登录脚本问题排查与修复
问题分析与解决步骤
1. 缺少浏览器模拟请求头
多数网站会校验请求的User-Agent、Referer等头信息,直接用requests.post提交容易被拦截。同时要使用会话保持Cookie,因为登录流程通常依赖Cookie维持状态:
from pyquery import PyQuery import requests url = 'https://licensing.gov.nl.ca/miriad/sfjsp?interviewID=MRlogin' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36', 'Referer': url } values = { 'd_1553779889165': 'email@email.com', 'd_1553779889166': 'thisIsMyPassw0rd$$$', 'd_1618409713756': 'true', 'd_1642075435596': 'Sign in' } # 用Session维持会话Cookie session = requests.Session() # 先GET登录页获取初始Cookie session.get(url, headers=headers) # 提交登录请求 r = session.post(url, data=values, headers=headers) # 解码成字符串更易查看结果 print(r.content.decode('utf-8'))
2. 表单参数可能是动态生成的
你代码里的参数键(如d_1553779889165)带时间戳格式,大概率是每次访问登录页都会变化的动态值。需要先获取登录页HTML,提取真实的表单字段:
from pyquery import PyQuery import requests session = requests.Session() url = 'https://licensing.gov.nl.ca/miriad/sfjsp?interviewID=MRlogin' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } # 获取登录页HTML response = session.get(url, headers=headers) pq = PyQuery(response.content) # 提取表单所有输入字段 form_data = {} for input_tag in pq('form input'): name = input_tag.get('name') value = input_tag.get('value', '') if name: form_data[name] = value # 替换为你的账号密码(注意:需匹配提取到的真实字段名,可能和你之前的键不同) form_data['d_1553779889165'] = 'email@email.com' form_data['d_1553779889166'] = 'thisIsMyPassw0rd$$$' form_data['d_1642075435596'] = 'Sign in' # 提交表单 r = session.post(url, data=form_data, headers=headers) print(r.content.decode('utf-8'))
3. 额外校验项检查
- 确认表单的
action属性:有些表单会提交到和当前页不同的地址,需要从登录页的<form>标签中提取action值作为POST目标地址。 - CSRF令牌:多数网站会在表单中隐藏CSRF令牌字段,上面的代码提取所有表单参数时会自动包含该字段,无需额外处理。
内容的提问来源于stack exchange,提问作者vahnx
相关产品推荐
相关产品推荐

