我正在使用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 {
...
}
})
答案 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)
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条)。