如何将变量传递给驱动程序执行脚本?

Posted

技术标签:

【中文标题】如何将变量传递给驱动程序执行脚本?【英文标题】:How to pass variables to driver execute script? 【发布时间】:2022-01-13 05:58:51 【问题描述】:

我正在尝试将一些变量传递给 js 执行器,但没有运气。 我几乎尝试了所有方法,但尽管它打印变量,但执行程序在网页上什么也没做。

代码如下:

    strings = ["ABC","DEF"]

elems = [i.text for i in driver.find_elements_by_xpath(title)]

import itertools
from json import dumps

for string, elem in zip(strings, elems):
    print(string, elem)

    driver.execute_script("arguments[0].innerhtml = ''".format(string), elem)
   # driver.execute_script("arguments[0].innerHTML = ' + dumps(string)'", elem)
   # driver.execute_script("arguments[0].innerHTML = arguments[1]", string, elem)
    time.sleep(2)

【问题讨论】:

你把你的司机贴在哪里了? 在此之前声明了驱动程序,这只是一直困扰我的部分代码:) 代码看起来不错,检查 iframe。 我不明白你为什么会得到i.text 并将此文本用作arguments[0]。至于我,您尝试将 HTML 插入到不存在的元素中。至于我,你应该使用i 而不是i.text - 这可能会导致所有问题。 呃,@furas,我爱你 :) 是 i.text 导致了问题。现在一切正常。非常感谢:) 请把它作为答案,这样我就可以勾选它,好吗?再次感谢! 【参考方案1】:

如果您想使用innerHTML,那么您应该使用i 而不是i.text

如果你想使用arguments[1],那么你必须以不同的顺序使用execute_script(...)中的值elem,string而不是string,elem

from selenium import webdriver
             
url = 'http://***.com/'

driver = webdriver.Firefox()
driver.get(url)
 
strings = ["ABC", "DEF"]

title = '//title'
elems = driver.find_elements_by_xpath(title)

for string, elem in zip(strings, elems):
    print(string, elem)

    # WORKS
    #driver.execute_script("arguments[0].innerHTML = ''".format(string), elem)
    
    # WORKS - needs different order `elem, string` instead of `string, elem`
    driver.execute_script("arguments[0].innerHTML = arguments[1]", elem, string)
    #time.sleep(2)

顺便说一句:

如果您想将新文本附加到现有的title,那么您应该使用

"arguments[0].text += arguments[1]"

可能还需要在新旧文本之间添加空格

"arguments[0].text += ' ' + arguments[1]"

【讨论】:

很好的信息,非常感谢。它有效:)

以上是关于如何将变量传递给驱动程序执行脚本?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用绑定变量执行 SQL 脚本

如何使用 Rails 代码/将变量传递给 .coffee javascript 文件?

如何使用'for'循环将新变量传递给python脚本

Shell 脚本之规范和变量

如何将环境变量传递给前端 Web 应用程序?

Perl 将变量传递给子程序