RSelenium:在运行我的代码

时间:2017-11-12 21:33:14

标签: r selenium

MacOS Sierra 10.12.4。 Chrome 63(最新版)。 R 1.1.383。

我使用RSelenium来抓取网页数据。我可以使用远程驱动程序提取数据,但实际的网页浏览器不会弹出供我查看。这使我很难调试一些棘手的网络拉动。 This is an example video of what I want to happen.用户可以直观地看到他在浏览器中所做的更改 - 本文的目的是找出在运行代码时无法直观地看到浏览器的原因。

这是我从RSelenium获取的流程示例。

来自终端:

(name)$ docker run -d -p 4567:4444 selenium/standalone-chrome (name)$ docker ps

输出:

CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                    NAMES
8de3a1cbc777        selenium/standalone-chrome   "/opt/bin/entry_po..."   5 minutes ago       Up 5 minutes        0.0.0.0:4567->4444/tcp   wizardly_einstein

在R

library(RSelenium)
library(magrittr)
library(stringr)
library(stringi)
library(XML)

remDr <- rsDriver(port = 4567L, browser = "chrome")
remDr$client$open()

remDr$client$navigate("https://shiny.rstudio.com/gallery/datatables-options.html")
webElems <- remDr$client$findElements("css selector", "iframe")
remDr$client$switchToFrame(webElems[[1]])
elems <- remDr$client$findElements("css selector", "#showcase-app-container > nav > div > ul li")

unlist(lapply(elems, function(x) x$getElementText()))
[1] "Display length"    "Length menu"       "No pagination"     "No filtering"      "Function callback"

这是我确认RSelenium正常运行。然而,这一切都在发生,盲目地#34; - 我无法看到发生了什么。在一个复杂的网络拉动中,我试图执行(隐藏在凭证后面,所以我不能给出一个例子),迭代后找不到某些元素,即使我知道它们在页面上。能够看到浏览器可以让我轻松调试代码。

不确定这是否意味着什么,但它看起来并不像驱动程序附加到IP地址:

(name)$ docker-machine ip
Error: No machine name(s) specified and no "default" machine exists

我还需要下载其他内容才能直观地看到网络驱动程序吗?提前谢谢。

1 个答案:

答案 0 :(得分:2)

我不确定该视频中的确切行为,但我总是使用phantomjs无头浏览器并查看屏幕截图。这段代码会产生我正在谈论的内容:

library(RSelenium)

#this sets up the phantomjs driver
pjs <- wdman::phantomjs()

#open a connection to it
dr <- rsDriver(browser = 'phantomjs')
remdr <- dr[['client']]

#go to the site
remdr$navigate("https://stackoverflow.com/")

#show browser screenshot in viewer
remdr$screenshot(TRUE)