RSelenium的问题

时间:2017-06-25 19:47:00

标签: r docker rselenium

大家晚上好,

我一直在尝试使用RSelenium运行我的旧脚本。由于一些变化,它不再起作用。原始代码是

require(RSelenium)
require(rvest)
RSelenium::checkForServer()
RSelenium::startServer()
remDr <- remoteDriver()
remDr$open()

remDr$navigate(linkPlayersPage)
doc <- remDr$getPageSource()
doc <- read_html(doc[[1]])
path <- "//table[@class='playersquickfindtable']/tbody/tr/td/form/table/tbody/tr/td/div/img"
quickFind <- doc %>% html_nodes(xpath=path) %>% xml_attr("alt")
remDr$close()

根据我在此处找到的建议,我将其更改为以下

require(RSelenium)
require(rvest)

driver <- rsDriver()
remDr <- driver[["client"]]

remDr$navigate(linkPlayersPage)
doc <- remDr$getPageSource()
doc <- read_html(doc[[1]])
path <- "//table[@class='playersquickfindtable']/tbody/tr/td/form/table/tbody/tr/td/div/img"
quickFind <- doc %>% html_nodes(xpath=path) %>% xml_attr("alt")
remDr$close()

事情是,它并没有真正起作用。或者它有时可行,但首先,它非常慢,第二个(更重要的问题)脚本经常停止(我有一个超过11000个地址的循环)。有时等待一段时间并从它停止的地方重新运行,它有效,有时根本不行,但我知道它应该有效。我收到以下错误(对不起,这是英语和法语的混合,但对于会说英语的人来说,几句法语单词应该不难翻译)

Error in if (!is.null(YD) && grepl("Draft", YD)) { : valeur manquante là où TRUE / FALSE est requis缺少需要TRUE / FALSE的值

checking geckodriver versions: BEGIN: PREDOWNLOAD Error in open.connection(con, "rb") : HTTP error 403.

有时我会遇到其他一些错误,但10“是最常见的。我真的不知道为什么以及如何解决这个问题。

今天我遇到了新的错误

checking geckodriver versions: BEGIN: PREDOWNLOAD BEGIN: DOWNLOAD BEGIN: POSTDOWNLOAD checking phantomjs versions: BEGIN: PREDOWNLOAD BEGIN: DOWNLOAD BEGIN: POSTDOWNLOAD Error in subprocess::spawn_process(tfile, ...) : could not create a pipe: system error message could not be fetched

我觉得所有这些都与rsDriver()有关。

在我读到的答案中,提到最好的办法是不要使用 rsDriver(),而是使用 Docker 。在昨天之前,我不知道这是什么,我找不到任何可以清楚地解释它的作用或如何将它与R和RSelenium一起使用的东西...例如RSelenium through docker。我已尝试过这些链接,但页面不显示......

有人可以帮忙解决这个问题吗?解决我的rsDriver()问题使其成为100%可行的解决方案对我来说很好。非常感谢你。有关信息,我使用的是OpenSuse(不知道这是否与Windows或Mac系统有所不同)。

我正在浏览的列表包含NFL网站上的玩家网页。一个例子是http://www.nfl.com/players/profile?id=00-0019290

1 个答案:

答案 0 :(得分:2)

最后,我可以使用Docker解决问题。以下https://cran.r-project.org/web/packages/RSelenium/vignettes/RSelenium-docker.html提供了有关如何继续的良好信息。该脚本工作正常,并没有停止(现在,我测试了大约100页,并在今天早上启动循环)。它仍在运行,可能需要一天多的时间才能完成。 我无法使用rsDriver解决问题,它总是会因错误而停止 Error in subprocess::spawn_process(tfile, ...) : could not create a pipe: system error message could not be fetched 我不知道为什么。即使我解决了我的问题并且可以再次运行我的脚本,如果有人知道rsDriver()没有完成这项工作的原因,我将不胜感激。