无法爬取Discover银行登录后账户余额页面的问题求助
问题排查&解决方案
先处理动态参数拉取
ssid不是会话自动生成的参数,是访问登录页时嵌入在页面HTML中的动态校验值,你需要先GET请求登录页面,从返回的HTML中解析出ssid、隐含的csrf类token字段,再填充到POST请求的payload中,直接空会话提交POST请求会因为缺少合法ssid被拦截。修正设备指纹校验逻辑
你现在硬编码的pm_fp参数和请求头的User-Agent不匹配,银行站点会做设备指纹一致性校验,参数不一致会直接判定为异常请求,踢出登录状态。要么根据当前请求的UA、屏幕、时区等信息动态生成匹配的pm_fp参数,要么直接复用浏览器抓包到的整套指纹+UA组合,不要跨环境混用参数。调整cookie处理流程
STRONGAUTHSVS、sectoken都是访问登录前置页时站点下发的前置cookie,你现在直接发起POST请求,会话中没有这些前置cookie,自然会被判定为未授权请求。调整流程为:先GET访问登录前置页,此时session会自动保存下发的所有前置cookie,再携带这些cookie提交POST登录请求,不需要手动往请求头里塞这些参数,session会自动托管。处理登录跳转逻辑
银行站点登录成功后通常会返回302跳转,登录凭证也经常在跳转响应的set-cookie字段里下发,你可以检查login_req的状态码和响应头,确认是否跟随跳转成功,有没有触发人机校验拦截。如果跳转被拦截,可以手动设置allow_redirects=True,或者手动请求跳转地址更新凭证。补充请求头字段
你现在的请求头缺少Accept、Accept-Encoding、Accept-Language等浏览器默认携带的字段,反爬策略很容易识别出是脚本请求,把这些字段补充完整,和真实浏览器的请求头保持一致,可以降低被拦截的概率。如果还是无法绕过校验,可以改用模拟浏览器的方案(如playwright、selenium)规避动态参数校验的问题。
内容的提问来源于stack exchange,提问作者Ultracrepidarian

