如何查找页面上出现多次的类元素的XPath?

时间:2019-03-31 11:36:17

标签: selenium xpath browser

我正在尝试使Selenium在类似Reddit的网站上单击upvote按钮。该站点有来自不同用户的条目,每个条目下方都有一个upvote和downvote按钮。我想要做的是让Selenium单击页面上的第一个upvote按钮(属于顶部的条目)。 我尝试在Chrome中使用“复制XPath”功能,但是页面上的所有upvote按钮都返回相同的XPath:

//*[@id="eksico-chevron-up-thick"]/path

这是网站的外观(如果需要):

enter image description here

那么,有什么方法可以找到第一个upvote按钮的XPath?我在想类似的东西:

//*[@id="eksico-chevron-up-thick"]/[1]

等预先感谢。

编辑:upvote元素之一的HTML代码:

enter image description here

2 个答案:

答案 0 :(得分:1)

您要单击的元素位于html结构中提到的shadow dom下,并且当前硒不支持对影子dom下的元素进行操作。
参考:https://medium.com/rate-engineering/a-guide-to-working-with-shadow-dom-using-selenium-b124992559f

因此,如果要单击元素,可以使用JavaScriptExecutor,例如:

WebElement element = driver.findElement(By.id("eksico-chevron-up-thick"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", element);

默认情况下,它将单击第一个元素本身,如果要单击特定的第n个元素,则可以将元素放在列表中,然后在方法内发送该元素的索引以使该元素被单击

答案 1 :(得分:0)

如果要单击第一个,可以使用 Driver.find_elements_by_xpath(//*[@id="eksico-chevron-up-thick"]/path)[1].click()