我是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()
答案 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()