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

Selenium调用get_cookies报错:JSON.stringify is not a function求助

环境信息

  • Selenium版本:4.10.0
  • Chrome版本:114.0.5735.91(正式版,64位)

原运行代码

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

My_Link = "......"

DRIVER_PATH = 'I://Decoded//chromedriver.exe'
s=Service(DRIVER_PATH)
browser = webdriver.Chrome(service=s)

browser.get(My_Link)
browser.find_element(By.NAME,"USER").send_keys(r)
browser.find_element(By.NAME,"PASSWORD").send_keys(d)
browser.find_element(By.CSS_SELECTOR,".ButtonSm").click()

cookies= browser.get_cookies()

报错信息

WebDriverException                        Traceback (most recent call last)
<ipython-input-10-b6bb484d2c6a> in <module>
      1
      2 
----> 3 cookies= browser.get_cookies()

WebDriverException: Message: unknown error: Runtime.callFunctionOn threw exception: TypeError: JSON.stringify is not a function
    at buildError (<anonymous>:323:18)
  (Session info: chrome=114.0.5735.91)
Stacktrace:
Backtrace:
    GetHandleVerifier [0x010CA813+48355]
    (No symbol) [0x0105C4B1]

异常原因

这个错误的核心是目标页面的JavaScript代码修改了全局的JSON对象,覆盖或破坏了JSON.stringify方法。Selenium的get_cookies()方法底层依赖浏览器原生的JSON.stringify来序列化cookie数据,当这个方法被页面脚本篡改后,就会抛出TypeError异常,进而触发WebDriverException。换Edge浏览器问题依旧,说明不是浏览器本身的问题,而是目标网站的页面脚本存在这个篡改行为。

解决办法

方法1:恢复原生JSON.stringify方法

在调用get_cookies()之前,执行一段JavaScript代码,重新注入原生的JSON.stringify实现:

# 在点击登录后添加这段代码
browser.execute_script("""
window.JSON.stringify = (function(original) {
    return function(value) {
        return original.call(JSON, value);
    };
})(window.JSON.stringify || function(){});
""")

# 再获取cookies
cookies = browser.get_cookies()

方法2:直接通过JS获取cookie并解析

绕过Selenium的get_cookies(),直接用JavaScript获取document.cookie,然后自己解析成字典格式:

# 执行JS获取原始cookie字符串
cookie_str = browser.execute_script("return document.cookie;")

# 解析成字典列表(模拟Selenium get_cookies的格式)
cookies = []
for item in cookie_str.split('; '):
    if '=' in item:
        name, value = item.split('=', 1)
        cookies.append({'name': name, 'value': value})

如果需要更完整的cookie字段(如domain、expiry),可以调整JS代码:

cookies = browser.execute_script("""
return document.cookie.split('; ').map(cookie => {
    const [name, ...valueParts] = cookie.split('=');
    const value = valueParts.join('=');
    const cookieObj = {name, value};
    // 尝试获取额外属性(浏览器支持度不同)
    try {
        const cookieDetails = document.cookie.match(new RegExp(`(^| )${name}=([^;]+)`));
        if (cookieDetails) {
            // 可扩展添加domain、path等字段
        }
    } catch(e) {}
    return cookieObj;
});
""")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:43:25