如何将Python变量传递给XPath表达式?

时间:2019-01-29 09:31:05

标签: python selenium xpath

我目前正在处理一个脚本,该脚本根据给定的文本打印Web元素的ID。到目前为止,我设法做到了:

wait.until(lambda browser: browser.find_element_by_xpath("//*[contains(text(), 'my_text')]"))
ID = browser.find_element_by_xpath("//*[contains(text(), 'my_text')]").get_attribute("id")
print(ID)

代码工作正常,但是我想对其进行更改,以便可以将其用于“ my_text”以外的字符串。

如何将变量传递给该函数?像这样:

variable = 'my_text'
wait.until(lambda browser: browser.find_element_by_xpath("//*[contains(text(), variable)]"))
ID = browser.find_element_by_xpath("//*[contains(text(), variable)]").get_attribute("id")
print(ID)

这样,我可以将任何文本分配给变量,并且每次都使用相同的函数。

谢谢!

4 个答案:

答案 0 :(得分:3)

尝试使用以下代码:

variable = "my_text"
your_needed_xpath = "//*[contains(text(), '{}')]".format(variable)

希望对您有帮助!

答案 1 :(得分:0)

您可以先将xpath模式格式化,然后再将其提供给方法。

pattern = "//*[contains(text(), %s)]" % variable
ID = browser.find_element_by_xpath(pattern).get_attribute("id")

答案 2 :(得分:0)

执行以下操作-只需将变量括在{}中,并在字符串前添加“ f”:

variable = 'my_text'
wait.until(lambda browser: browser.find_element_by_xpath(f'//*[contains(text(), {variable})]'))
ID = browser.find_element_by_xpath(f'//*[contains(text(),{variable})]').get_attribute("id")
print(ID)

这称为string interpolation

答案 3 :(得分:0)

您也可以尝试此方法。希望它会起作用。

str.extract