Selenium执行JS报ReferenceError:如何正确传递Python变量result_away?
问题解决:将Python变量传递到Selenium执行的JavaScript中
报错原因很明确:JavaScript运行在浏览器独立的上下文环境中,无法直接识别Python代码里定义的result_away变量,两者属于完全隔离的运行环境,自然会抛出"未定义"的错误。
下面是两种可行的解决方法:
方法1:字符串格式化嵌入变量值
直接把Python变量的实际值嵌入到JavaScript代码字符串中,同时注意先把ct1转成数值类型(否则np.round无法处理字符串):
# 修正类型转换,先把字符串转成float再取整 ct1 = df2[(df2['HomeTeam'] == at1)]['AwayTeamScore'].to_string(index=False) result_away = np.round(float(ct1), decimals=3) # 使用f-string将变量值嵌入JS代码 javaScript1 = f"document.getElementById('PoissonForm_homeGoalExp').value = {result_away}" driver.execute_script(javaScript1)
这种方式简单直接,最终浏览器执行的是带有具体数值的JS代码,而非未定义的变量名。
方法2:通过Selenium的参数传递(更规范)
利用execute_script方法的参数传递功能,将Python变量作为参数传给JavaScript,在JS中通过arguments数组获取对应参数:
ct1 = df2[(df2['HomeTeam'] == at1)]['AwayTeamScore'].to_string(index=False) result_away = np.round(float(ct1), decimals=3) # 将result_away作为参数传入,JS中用arguments[0]获取 driver.execute_script("document.getElementById('PoissonForm_homeGoalExp').value = arguments[0];", result_away)
这种方式更安全,尤其是处理包含特殊字符的字符串时,无需手动处理引号转义,Selenium会自动完成变量的传递和类型转换。
内容的提问来源于stack exchange,提问作者GP89853
相关产品推荐
相关产品推荐

