我正在尝试使Selenium在类似Reddit的网站上单击upvote按钮。该站点有来自不同用户的条目,每个条目下方都有一个upvote和downvote按钮。我想要做的是让Selenium单击页面上的第一个upvote按钮(属于顶部的条目)。 我尝试在Chrome中使用“复制XPath”功能,但是页面上的所有upvote按钮都返回相同的XPath:
//*[@id="eksico-chevron-up-thick"]/path
这是网站的外观(如果需要):
那么,有什么方法可以找到第一个upvote按钮的XPath?我在想类似的东西:
//*[@id="eksico-chevron-up-thick"]/[1]
等预先感谢。
编辑:upvote元素之一的HTML代码:
答案 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()