Поиск правильного xpath для кнопки «Далее» в поиске Google - PullRequest
2 голосов
/ 02 апреля 2019

Я использую R, но я не могу извлечь правильный xpath для "Next" кнопка поиска Google. Например, кто-то что-то ищет, прокручивает вниз, а затем нажимает «Далее» справа от списка чисел.

Вот что я могу извлечь из "осмотра" Chrome:

//*[@id="pnnext"]

Но когда я получаю пустой список, когда я пытаюсь использовать это xpath. Гаджет "Селектор CSS" дает мне следующее:

//*+[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 ]

2 голосов
/ 17 апреля 2019

Когда вы попросили решение для 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"
0 голосов
/ 17 апреля 2019

next_search = driver.find_element_by_xpath (// div [@ id = "tsf"] / div [2] / div / div [2] / div [2] / ul / li [10] / div / div [1 ] ) .Click ()

Это даст вам последнее предложение (10-е) из поиска Google.

0 голосов
/ 17 апреля 2019

Вы пытались найти элемент по идентификатору?

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

Мне всегда удобнее находить элементы по уникальному значению, когда это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...