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

Selenium如何在浏览器内执行脚本?执行声明变量脚本后控制台访问变量报错

问题根源
  • Selenium的execute_script方法执行的JS代码,默认会被包裹在独立的匿名函数作用域中运行,不属于浏览器的全局执行上下文
  • 原代码中通过var test = 'Test Now'声明的变量,仅存在于这个临时匿名作用域中,不会挂载到浏览器全局的window对象上
  • Chrome DevTools控制台的默认执行上下文为全局window,因此访问test时会抛出test is not defined的错误
修复方案

核心逻辑:将需要跨上下文访问的变量,主动挂载到全局window对象上

可直接运行的修正代码

from selenium import webdriver

# 配置chromedriver路径,用r前缀避免Windows路径的转义问题
chromePath = r'Selenium Injection\chromedriver.exe'
driver = webdriver.Chrome(executable_path=chromePath)

driver.get('https://www.google.com')
# 直接将变量挂载到window全局对象,而非在临时作用域内声明
driver.execute_script("window.test = 'Test Now'; return window.test;")

执行上述代码后,直接在Chrome DevTools控制台输入test,即可正常读取到'Test Now'的值。

注意事项

  • Windows环境下配置本地文件路径时,建议在路径字符串前加r前缀声明为原始字符串,避免反斜杠被识别为转义字符导致的路径找不到问题
  • 只要是需要在DevTools控制台、或者Selenium多次执行脚本之间复用的变量,必须显式绑定到window对象上;在execute_script临时作用域内用var/let/const声明的变量,脚本执行完成后作用域就会被销毁,根本无法被外部访问
  • 代码中的return语句仅用于向Selenium Python端返回脚本执行结果,不影响变量的作用域归属

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 04:54:06