在Google搜索中为“下一步”按钮找到正确的xpath

时间:2019-04-02 19:46:06

标签: css r xpath

我正在使用R,但似乎无法为“下一步”提取正确的xpath Google搜索的按钮。例如,搜索某物,滚动到底部,然后单击数字列表右侧的“下一步”。

这是我可以从Chrome的“检查”中提取的内容:

//*[@id="pnnext"]

但是当我尝试使用该xpath时得到一个空白列表。 CSS Selector小工具给了我这个:

//*+[contains(concat( " ", @class, " " ), concat( " ", "ch", " " ))]//span

但是同样的问题。为了在R代码或“可点击”中有用,我知道它来自href部分。 xpath正确地“单击”“下一步”按钮是什么?


引导代码:

library(RSelenium) # run in docker

remDr <- remoteDriver(port = 4445L, browserName = "chrome")
remDr$open()
remDr$navigate("https://books.google.com/")
books <- remDr$findElement(using = "css", "[name = 'q']")
books$sendKeysToElement(list("NHL books", key = "enter"))

# Clicks on all 10 links of first result page
bookElem <- remDr$findElements(using = "xpath",
                       "//h3[@class = 'LC20lb']//parent::a")
links <- sapply(bookElem, function(bookElem){
  bookElem$getElementAttribute("href")
})

# Gets stuff I want from every search result
big_list <- lapply(links, function(link) {

  # Navigate to each link
  remDr$navigate(link)

  # Do various things
  if (...) {
  ...
  } else {
  ...
  }

})

3 个答案:

答案 0 :(得分:2)

当您要求XPath解决方案时,我会添加它。

这对我有用:

nextButton <- remDr$findElement("xpath", "//*[@id = 'pnnext']")

因此,实际上您的xpath看起来没有错。将其包装在findElement()函数中时可能会出错。

我将为您添加完整的代码,以便您可以重现结果。

完整示例:

remDr$navigate("https://books.google.com/")
books <- remDr$findElement(using = "css", "[name = 'q']")
books$sendKeysToElement(list("NHL books", key = "enter"))

bookElem <- remDr$findElements(using = "xpath",
                               "//h3[@class = 'LC20lb']//parent::a")
links <- sapply(bookElem, function(bookElem){
  bookElem$getElementAttribute("href")
})


nextButton <- remDr$findElement("xpath", "//*[@id = 'pnnext']")
nextButton$clickElement()

remDr$screenshot(TRUE)

enter image description here

remDr$getCurrentUrl()

"https://www.google.com/searchq=NHL+books&tbm=bks&ei=M9y2XL2HBPDjkgWklqXoDg&start=10&
sa=N&ved=0ahUKEwj97OjL09bhAhXwsaQKHSRLCe0Q8NMDCIUB&biw=1020&bih=694&dpr=1"

答案 1 :(得分:0)

您是否尝试过通过ID查找元素?

remDr$findElement(using = "id", "pnnext")

我发现在可能的情况下按唯一值查找元素总是更安全。

答案 2 :(得分:-1)

next_search = driver.find_element_by_xpath(// div [@ id =“ tsf”] / div [2] / div / div [2] / div [2] / ul / li [10] / div / div [1 ] ).click()

这将为您提供Google搜索的最后建议(第10条)。