如何将变量传递给驱动程序执行脚本?
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]"
【讨论】:
很好的信息,非常感谢。它有效:)以上是关于如何将变量传递给驱动程序执行脚本?的主要内容,如果未能解决你的问题,请参考以下文章