Python + Selenium-如何找到动态元素

时间:2018-12-29 02:47:54

标签: python selenium selenium-webdriver xpath webdriver

我是Selenium中的新手。我试图单击一个元素,HTML结构如下:

<label>
     <span> text </span>
</label>

我需要点击<span>下的“文本”,这整个内容都在另一个span / div / body等内部,并且我正在尝试使其变得动态,因此可以使用其他文本来定位它好吧。

我正在使用以下代码:

[...]
vote = input("Which option should I vote for you? :  ")
option = "//label/span[contains(.,'" + vote + "')]\""
option = str(option)
[...]
browser.find_element_by_xpath(option).click()

3 个答案:

答案 0 :(得分:0)

您可以使用CSS选择器,但是在不了解其余DOM的结构的情况下,它可能不够独特,无法可靠地获取所需的元素:

position

答案 1 :(得分:0)

多余的双引号使您的xpath无效-这是这里的转义字符:

 "')]\""

构造option字符串时,xpath结束

//label/span[contains(.,'text')]"

,最后的"打破了它。

只要放下它,你就会很好:

option = "//label/span[contains(.,'" + vote + "')]"

您不必将option强制转换为字符串-它已经属于这种类型。另外,这种使用字符串格式的字符串构造方式更像“ pythonic”:

option = "//label/span[contains(.,'{}')]".format(vote)

答案 2 :(得分:0)

要单击动态元素,可以使用以下解决方案:

vote = input("Which option should I vote for you? :  ")
browser.find_element_by_xpath("//label/span[normalize-space()='" + vote + "']").click()