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

Python自动登录网站出现JSONDecodeError问题求助

问题排查与错误原因分析

核心错误根源

json.decoder.JSONDecodeError 表明你尝试解析的响应内容不是有效的JSON格式——要么是res.content为空字符串,要么服务器返回了非JSON的内容(比如HTML错误页、无意义文本),导致json.loads()无法完成解析。

具体诱因及修复方案

  • 请求未成功,返回异常状态码
    当用户名密码错误、请求参数不合法或被网站反爬拦截时,服务器通常会返回4xx/5xx状态码,此时响应内容是错误提示页而非预期的JSON令牌。
    修复:在解析前先校验请求状态,添加异常抛出逻辑:

    res = s.post('https://domainNamePostUrl', json=payload)
    # 若状态码非200,直接抛出异常终止流程
    res.raise_for_status()
    
  • 响应内容为空
    网络波动、请求被拦截等情况会导致服务器返回空内容,json.loads()自然无法解析空字符串。
    修复:把print(res.content)移到解析代码之前,先查看真实返回内容:

    res = s.post('https://domainNamePostUrl', json=payload)
    print("实际响应内容:", res.content)  # 先确认返回值
    s.headers.update({'authorization': json.loads(res.content)['token']})
    
  • 请求参数格式不匹配接口要求
    部分网站登录接口只接受表单格式(application/x-www-form-urlencoded)的参数,你用json=payload会发送application/json格式数据,不符合接口预期导致返回错误内容。
    修复:改用data参数提交表单数据:

    res = s.post('https://domainNamePostUrl', data=payload)
    
  • 缺少必要请求头被拦截
    多数网站会校验User-Agent等请求头,模拟浏览器标识,缺失会被判定为爬虫,返回非预期内容。
    修复:在创建Session后添加模拟浏览器的请求头:

    s = requests.Session()
    s.headers.update({
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
    })
    
  • 网站存在反爬验证(验证码、前置Cookie)
    若网站需要验证码、或必须先访问首页获取特定Cookie才能登录,直接发送账号密码请求会被拦截,返回空或错误内容。
    修复:手动登录一次,用浏览器开发者工具查看登录请求的完整参数、Cookie、请求头,确保代码复刻所有必要信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:03:31