Selenium执行execute_script调用fetch报NameError的解决办法
修复Selenium执行fetch请求的NameError问题
错误根源
你当前的代码把浏览器端的JavaScript fetch 逻辑直接当成Python代码执行了,Python解释器无法识别fetch这个浏览器专属的API,因此抛出NameError: name 'fetch' is not defined。
修复方法
核心是把fetch请求的代码作为完整的JavaScript字符串传给driver.execute_script(),而不是在Python环境中直接写fetch代码。
修复后的完整代码
driver.get(URL1) driver.get('URL') # 使用Python三引号包裹JS代码,避免引号转义冲突 fetch_js = """ fetch("URL", { "headers": { "accept": "application/json, text/javascript, */*; q=0.01", "accept-language": "en-GB,en-US;q=0.9,en;q=0.8", "content-type": "application/x-www-form-urlencoded; charset=UTF-8", "sec-ch-device-memory": "8", "sec-ch-ua": "\"Google Chrome\";v=\"107\", \"Chromium\";v=\"107\", \"Not=A?Brand\";v=\"24\"", "sec-ch-ua-arch": "\"x86\"", "sec-ch-ua-full-version-list": "\"Google Chrome\";v=\"107.0.5304.88\", \"Chromium\";v=\"107.0.5304.88\", \"Not=A?Brand\";v=\"24.0.0.0\"", "sec-ch-ua-mobile": "?0", "sec-ch-ua-model": "", "sec-ch-ua-platform": "\"Windows\"", "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "same-origin", "x-esro-af": "s9TeAPYWl4s=", "x-requested-with": "XMLHttpRequest" }, "referrer": "URL", "referrerPolicy": "strict-origin-when-cross-origin", "body": "URL CONTENT", "method": "POST", "mode": "cors", "credentials": "include" }); """ # 执行JavaScript代码 driver.execute_script(fetch_js)
进阶:获取fetch返回结果
如果需要拿到请求的响应数据,可以在JS代码中添加return和Promise处理,Python端接收返回值:
response_data = driver.execute_script(""" return fetch("URL", { // 这里是你的请求配置 }) .then(res => res.json()); // 将响应转为JSON格式返回 """) print(response_data)
内容的提问来源于stack exchange,提问作者Ruibin Wu
相关产品推荐
相关产品推荐

