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

使用Selenium发送JS POST请求提示XMLHttpRequest未定义问题求助

问题成因
  • 核心原因是你执行了js = js.replace(" ", "")操作,把JS代码里的所有空格都删除了,原本的new XMLHttpRequest()被拼接为newXMLHttpRequest(),浏览器会把这一整串识别为未定义的自定义变量,直接触发未定义报错。
  • 小概率场景是调用driver.execute_script时页面还未完成加载,浏览器上下文的全局XMLHttpRequest对象还未初始化完成。
解决办法
  • 首先删除多余的全量空格替换逻辑,不需要对JS字符串做空格清洗,仅保留换行替换即可,原生多行JS代码可以直接在execute_script中正常运行。
  • 执行JS前可以增加页面加载状态判断,确保上下文初始化完成:可以增加driver.implicitly_wait(3),或者先执行JS判断document.readyState == 'complete'后再发起请求。
  • 更稳妥的替代方案是使用fetch发送请求,语法更简洁,也不会出现空格导致的语法异常,参考代码如下:
js = '''
return fetch('https://www.ti.com.cn/occservices/v2/ti/addtocart', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "cartRequestList": [{
      "packageOption": null,
      "opnId": "%s",
      "quantity": "%d",
      "tiAddtoCartSource": "store-pdp",
      "dienCode": "",
      "year": "",
      "week": "",
      "batchCode": "",
      "pcrCode": "",
      "sparam": ""
    }],
    "currency": "CNY"
  })
}).then(res => res.text())
''' % (product['opn'], product['num'])
resp = driver.execute_script(js)
return resp

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:39:03