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

如何通过Python+Selenium的execute_script获取JS控制台响应状态码?

如何通过Selenium验证fetch请求的403状态码

我用Selenium的execute_script()在Chrome控制台发送JS fetch请求,请求能正常执行,但想写个函数验证响应是403状态码。有没有内置的Selenium函数/库可以提取状态码或响应来做断言验证?

当前代码:

send_request = """
fetch(url, {
  method: 'POST',
  body: '',
  headers: headers,
})
  .then(res => {
    console.log(res.status)
    return res.json()
  })
  .then(
    (result) => {
      console.log(result)
    },
    (error) => {
      console.error(error)
    }
)"""
context.browser.execute_script(send_request)

Selenium没有直接提取fetch响应状态码的内置函数,但可以修改你注入的JS代码,让它返回响应的状态码,之后在Python代码里接收这个返回值并做断言验证。

修改方案

  1. 调整fetch的JS逻辑,去掉冗余的日志输出,在第一个then回调里直接返回res.status;同时增加异常捕获,处理请求失败的情况。
  2. 执行脚本时接收返回的状态码,用断言验证是否符合预期。

修改后的完整代码

send_request = """
return fetch(url, {
  method: 'POST',
  body: '',
  headers: headers,
})
  .then(res => {
    return res.status; // 直接返回状态码供Selenium接收
  })
  .catch(error => {
    console.error(error);
    return -1; // 用特定值标记请求失败场景
  });
"""
# 执行脚本并获取返回的状态码
response_status = context.browser.execute_script(send_request)
# 断言状态码为403
assert response_status == 403, f"预期状态码403,实际得到{response_status}"

额外说明

  • 如果需要同时获取响应体和状态码,可以让JS返回一个包含两者的对象,注意要使用async/await处理异步逻辑:
    return (async () => {
      try {
        const res = await fetch(url, {
          method: 'POST',
          body: '',
          headers: headers,
        });
        return {status: res.status, body: await res.json()};
      } catch (error) {
        console.error(error);
        return {status: -1, body: null};
      }
    })();
    
  • 异常捕获能避免因网络错误、跨域问题等场景导致断言逻辑直接报错,让测试更健壮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:15:51