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

Selenium Python driver.execute_script执行代码无效问题求助

问题核心原因

你所有报错和执行无效的根源是对driver.execute_script()的用法理解完全错误:

  • execute_script()的作用是向浏览器注入运行JavaScript代码,执行上下文是浏览器的JS环境,根本识别不了你在Python环境里定义的driver对象、也跑不了Python语法的Selenium API调用
    • 你去掉首尾引号传代码时,浏览器拿到的是Python语法的Selenium代码,JS环境里找不到driver变量,直接报未定义错误
    • 你加上首尾引号传代码时,浏览器拿到的是一个普通的JS字符串字面量,执行时只会生成一个字符串值,不会触发任何操作,自然没有实际效果
  • 额外问题:你之前用字符串拼接整段执行代码的写法冗余度极高,大量无意义的类型转换、引号转义,可读性极差,非常容易触发隐蔽的语法错误。
正确实现方式

完全不需要绕execute_script的弯路,直接在Python层构造动态XPath,直接调用Selenium原生方法即可:

from selenium.webdriver.common.by import By

# 仅构造动态变化的XPath部分即可,用f-string简化拼接逻辑
target_xpath = f"//input[@ID='_obj__TIMESHEETITEMS_{rowCounter}_-_obj__PROJECTID']"
input_content = str(nonProjects['Projects'][rowCounter-2])
# 直接调用Selenium API完成元素查找和内容输入
driver.find_element(By.XPATH, target_xpath).send_keys(input_content)

如果遇到特殊场景下原生send_keys不生效(比如部分前端框架做了输入拦截),确实需要用JS注入操作的话,也要写符合浏览器JS语法的代码,通过参数传递动态值,不要硬拼整段代码:

target_xpath = f"//input[@ID='_obj__TIMESHEETITEMS_{rowCounter}_-_obj__PROJECTID']"
input_content = str(nonProjects['Projects'][rowCounter-2])

js_script = """
// 通过XPath在页面中查找目标元素
const inputEl = document.evaluate(
  arguments[0], 
  document, 
  null, 
  XPathResult.FIRST_ORDERED_NODE_TYPE, 
  null
).singleNodeValue;
// 赋值后触发input事件,保证前端框架能识别到值变更
inputEl.value = arguments[1];
inputEl.dispatchEvent(new Event('input', { bubbles: true }));
"""
# 通过参数传递XPath和输入值,避免引号转义、特殊字符报错问题
driver.execute_script(js_script, target_xpath, input_content)
  • 注意:调用execute_script时,所有动态值都通过arguments顺序传参,不要自己把值拼进JS代码字符串里,可以从根源上避免引号不匹配、特殊字符转义失败、注入类问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:31:01