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

使用Python Selenium操作第三方支付页面触发JSON.stringify报错

问题

使用Python的Selenium库操作第三方支付页面时,无论是调用send_keys向信用卡安全码字段输入内容,还是执行获取current_url这类基础交互操作,都会触发相同错误。更换Chrome、Edge、Firefox浏览器驱动后问题依旧,错误在操作执行前就弹出。

代码示例

from selenium import webdriver
browser = webdriver.Chrome(r"C:\Users\m234234\Downloads\chromedriver_win32.exe")
...
...
Element3 = browser.find_element(By.ID, 'scp_cardPage_csc_input')
Element3.send_keys('231')

目标元素代码

<input autocomplete="off" maxlength="4" type="text" class="scp_text_input" name="csc" aria-required="true" aria-label="Security Code" aria-describedby="scp_cardPage_csc_error" id="scp_cardPage_csc_input" value="" size="5" onkeypress="return checkNum(event)"></input>

完整错误信息

WebDriverException: unknown error: Runtime.callFunctionOn threw exception: TypeError: JSON.stringify is not a function
    at buildError (<anonymous>:323:18)
  (Session info: chrome=113.0.5672.126)

更新说明

脚本进入第三方支付页面后,任何页面交互操作(如获取current_url)都会触发相同错误。


解决思路与方案

这个错误的核心是页面环境中JSON.stringify方法被篡改或缺失,导致Selenium底层JS调用失败——第三方支付页面通常会通过重写原生JS方法来干扰自动化工具。

  • 绕过自动化检测:使用Chrome专属启动参数,避免页面篡改原生JS方法:
    修改启动代码:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    options = Options()
    options.add_argument("--disable-blink-features=AutomationControlled")
    browser = webdriver.Chrome(executable_path=r"C:\Users\m234234\Downloads\chromedriver_win32.exe", options=options)
    
  • 手动恢复原生方法:如果上述参数无效,进入支付页面后立即执行JS代码恢复JSON.stringify:

    # 进入支付页面后执行
    browser.execute_script("""
    window.JSON.stringify = function(obj) {
      if (typeof obj === 'object' && obj !== null) {
        if (Array.isArray(obj)) {
          return '[' + obj.map(item => window.JSON.stringify(item)).join(',') + ']';
        }
        return '{' + Object.keys(obj).map(key => `"${key}":${window.JSON.stringify(obj[key])}`).join(',') + '}';
      }
      return JSON.stringify(obj);
    };
    """)
    
  • 模拟人工输入节奏:用ActionChains分步输入字符,降低触发页面异常检测的概率:

    from selenium.webdriver.common.action_chains import ActionChains
    
    element = browser.find_element(By.ID, 'scp_cardPage_csc_input')
    actions = ActionChains(browser)
    actions.move_to_element(element).click()
    for char in '231':
        actions.send_keys(char).pause(0.1)
    actions.perform()
    
  • 严格匹配驱动与浏览器版本:确认每个浏览器的驱动版本和浏览器版本完全对应(比如Chrome 113.x必须搭配同版本的chromedriver),版本不兼容也可能引发底层JS调用异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:22:57