我使用以下行选择在网页上查找特定文本的元素:
driver.find_element_by_xpath("//*[contains(text(), 'my string')]")
这很好用。
但是,如果我将字符串赋值给一个变量并尝试使用该行中的变量(如下所示),我会得到一个异常,说明该表达式是不合法的。
varname = 'my string'
driver.find_element_by_xpath("//*[contains(text(), varname)]")
我想多次重复此搜索以获得一些字符串而无需反复写入该行。我的最终目标是拥有一个我迭代的字符串列表,如下所示:
mystrings = ('my first string','my second string','my third string')
for x in mystrings:
driver.find_element_by_xpath("//*[contains(text(), x)]")
答案 0 :(得分:1)
因为它确实在寻找文本“varname”。您需要格式化文本以传递变量:
varname = 'my string'
driver.find_element_by_xpath("//*[contains(text(), '%s')]" % varname) # option 1
driver.find_element_by_xpath("//*[contains(text(), '{0}')]".format(varname)) # option 2
任一选项都可以使用,只取决于你喜欢格式化字符串的方式。
同样适用于列表:
mystrings = ['my first string','my second string','my third string']
for x in mystrings:
driver.find_element_by_xpath("//*[contains(text(), '%s')]" % x)
编辑:忘了包含单引号。代码已更新。