Получить текст элемента с помощью RSelenium

Я боролся со следующими строками кода уже несколько часов, и мне все еще кажется, что я не приблизился к решению. Мой код выглядит следующим образом:

#create a list of all the question elements on the page
questions <- remDr$findElements(using = 'xpath', "//div[@class='question-text']")

#get the first question element in the list
question <- questions[1]

#get the text of the question element
question$getElementText()

Когда я отлаживаю с помощью RStudio, создается впечатление, что список "вопросов" заполнен правильно всеми элементами "вопроса"; пункт "вопрос" правильно заполнен первым элементом "вопрос" в списке; но многие изменения в следующей строке кода, предназначенные для получения текста в элементе вопроса, кажутся неудачными, приводя к следующей ошибке:

Error in evalq({ : attempt to apply non-function

Возможно, что ошибка происходит из другой части кода, но очень маловероятно, так как комментирование этой строки, кажется, оставляет все остальное работающим отлично.

Я был бы очень признателен за любую помощь, которую вы, ребята и девочки, могли бы оказать. Я программирую на R с использованием RSelenium - как вы, вероятно, можете сказать, я новичок в R, хотя у меня очень ограниченный опыт использования Selenium в других средах.

Заранее спасибо за ваши мысли!

1 ответ

question не имеет функции с именем getElementText; это list объект вместо webElement объект. Тебе нужно [[ вместо [ - проверьте этот пример:

library(RSelenium)
rD <- rsDriver(port=4444L, browser = "phantomjs")
remDr <- rD[["client"]]
remDr$navigate(
  "http://stackru.com/questions/43833649/get-element-text-using-rselenium")
elems <- remDr$findElements(using = 'xpath', "//a")
elem <- elems[1]
class(elem)
# [1] "list"
elem$getElementText()
# Error: attempt to apply non-function

Сейчас

elem <- elems[[1]]
class(elem)
# [1] "webElement"
elem$getElementText()
# [[1]]
# [1] "Stack Overflow"
elem$getElementText()[[1]]
# [1] "Stack Overflow"
remDr$close()
rD[["server"]]$stop() 
Другие вопросы по тегам