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

Chrome 130+环境下Selenium 3执行JavaScript报错的解决求助

问题:Selenium 3.6(Node.js)结合Chrome 130+执行JS代码失效的解决办法

项目仍在使用Selenium 3.6(Node.js),因应用特性需要执行JavaScript代码,该操作在Chrome 130版本前可正常运行,但升级至Chrome 130+后失效,不过在Firefox中仍能正常工作。已知最新版Selenium 4可解决此问题,但目前无法切换至Selenium 4。曾排查是否与JsonWireProtocol的变更有关,但未找到相关答案,求解决办法。

相关代码片段

let element = this.driver.wait(until.elementLocated(By.css(selector)), waitTimeout);

await this.driver.wait(until.elementIsVisible(element), waitTimeout);
await this.driver.wait(until.elementIsEnabled(element), waitTimeout);
await this.driver.executeScript('arguments[0].scrollIntoView(true);', element);

执行错误信息

JavascriptError: javascript error: Cannot read properties of undefined (reading 'scrollIntoView')
  (Session info: chrome=131.0.6778.86)
  (Driver info: chromedriver=131.0.6778.85 (3d81e41b6f3ac8bcae63b32e8145c9eb0cd60a2d-refs/branch-heads/6778@{#2285}),platform=Windows NT 10.0.19045 x86_64)

解决办法

Chrome 130+对JsonWireProtocol的元素序列化逻辑做了变更,Selenium 3.6的旧版本无法正确处理新协议返回的元素对象,导致executeScript时arguments[0]为undefined。以下是几种可行的解决方式:

方案1:在JS代码内直接定位元素

跳过Selenium传递元素对象的步骤,把选择器传入JS代码,在浏览器端直接定位元素并执行操作:

await this.driver.executeScript(`document.querySelector('${selector}').scrollIntoView(true);`);

注意:如果选择器包含引号等特殊字符,需要提前转义,避免JS语法错误。

方案2:降级Chrome版本到129及以下

如果暂时无法修改代码,可以将Chrome浏览器和对应版本的chromedriver降级到129版本,恢复原有兼容性。

方案3:临时修改Selenium 3的内部逻辑

部分开发者针对该问题提供了临时兼容补丁,可修改selenium-webdriver包的内部代码,适配Chrome 130+的元素处理逻辑:

  • 找到项目依赖中selenium-webdriver/lib/webdriver.js文件
  • 修改元素序列化相关逻辑,确保传递给executeScript的元素能被Chrome正确识别
    这种方式需要维护自定义补丁,后续升级依赖时容易失效,仅作为应急方案。

内容的提问来源于stack exchange,提问作者G. Kolev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 20:55:06