You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python Requests实现网站表单登录无响应问题求助

问题原因

  • 缺失必填的隐藏校验参数:你提供的HTML表单里存在name为token的隐藏输入项,这是网站用于防范CSRF攻击的校验字段,每次访问登录页面都会生成新的有效值,必须先从GET请求返回的页面中提取该值,再带入POST请求才能通过校验
  • 提交字段名不匹配:
    • 交易PIN对应的表单字段名为tradingPIN(PIN为大写),你代码中写的tradingpin大小写不匹配,后端无法识别
    • 用户名、密码输入框未设置name属性,说明该站点不是通过原生表单逻辑提交,而是通过JS读取控件ID获取值后提交,你需要用浏览器F12的网络面板抓实际登录请求的参数,确认这两个字段的提交key,常规情况下会和控件ID一致,即用户名字段为u-value、密码字段为password
  • 未携带必要的请求头:部分站点会校验Referer、Content-Type等请求头,缺失也会导致请求被拦截

修正后参考代码

import requests
from bs4 import BeautifulSoup

headers = {
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36',
    'Referer': 'https://my.website.com/',
    'Content-Type': 'application/x-www-form-urlencoded'
}

with requests.Session() as s:
    url = "https://my.website.com/"
    r = s.get(url, headers=headers)
    # 提取隐藏token参数
    soup = BeautifulSoup(r.text, 'lxml')
    token = soup.find('input', {'name': 'token'})['value']
    
    login_data = {
        "token": token,
        # 这里的u-value和password字段请根据你抓包的实际key修改
        "u-value": "myusername",
        "password": "mysupersecurepassword",
        "tradingPIN": "123456"
        # 如果有自动填充交易PIN的勾选需求,可补充"isTPinAutoFill": "on"
    }

    # 发起登录POST请求
    r = s.post(url, data=login_data, headers=headers)
    # 打印登录后的返回内容确认是否跳转成功
    print(r.status_code)
    print(r.text)

额外排查建议

如果修改后还是无法登录,用浏览器F12抓正常登录时的POST请求,对比以下信息:

  • 所有提交的参数是否和抓包结果完全一致,包括key名、值的格式
  • 请求头是否有特殊校验字段,比如X-Requested-With、自定义鉴权头
  • 确认POST提交的目标URL是否和你代码里的一致,部分站点的登录提交地址和登录页地址不同

内容的提问来源于stack exchange,提问作者Ben Daggers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 13:00:02