2017-05-07 47 views
0

我一直在努力处理几个小时的下列代码,现在我似乎还没有接近解决方案。我的代码如下:使用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 

这是可能的错误来自的不同部分代码,但不太可能,因为注释该行似乎让所有其他工作都完美无缺。

我会非常感谢任何帮助你们和gals可能提供的帮助。我使用RSelenium在R中进行编程 - 正如您可以说的那样,虽然我在其他环境中使用Selenium的经验非常有限,但我对R很陌生。

在此先感谢您的想法!

+0

欢迎SO。请将鼠标悬停在R标签上 - 它会要求您提供一个最小可重现的示例。你的例子是不可重现的:执行代码yield _“Error:object'remDr'not found”_。 – lukeA

+0

道歉,卢克,我试图提供最短的可能的例子来说明问题,但显然我忽略了一个可重复的例子。下次尝试做得更好。 – thunderbuck88

+0

除非你声明你在挖掘一个无法共享的内部工作资源,否则在wld帮助人们知道他们是否正在帮助某人从事盗窃知识产权的事情之后发布你要去的URL。 – hrbrmstr

回答

3

question没有函数getElementText;这是一个list对象而不是webElement对象。你需要[[而不是[ - 看看这个例子:

library(RSelenium) 
rD <- rsDriver(port=4444L, browser = "phantomjs") 
remDr <- rD[["client"]] 
remDr$navigate(
    "http://stackoverflow.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()