MacOS 塞拉利昂 10.12.4。Chrome 63(最新)。R 1.1.383。
我正在使用 RSelenium 来抓取网络数据。我可以使用远程驱动程序提取数据,但实际的网页浏览器不会弹出供我查看。这使得调试一些比较棘手的网络拉取变得很困难。这是我想要发生的事情的示例视频。用户可以直观地看到他在浏览器中所做的更改 - 这篇文章的目的是找出为什么我在运行代码时无法直观地看到浏览器。
这是我从 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
Run Code Online (Sandbox Code Playgroud)
在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"
Run Code Online (Sandbox Code Playgroud)
这是我对 RSelenium 工作正常的确认。然而,这一切都是“盲目”发生的——我看不到发生了什么。在我尝试执行的复杂网络拉取(隐藏在凭据后面,因此我无法给出示例)中,某些元素在迭代后无法找到,即使我知道它们位于页面上。能够看到浏览器将使我能够轻松调试代码。
不确定这是否意味着什么,但驱动程序看起来并没有附加到 IP 地址:
(name)$ docker-machine ip
Error: No machine name(s) specified and no "default" machine exists
Run Code Online (Sandbox Code Playgroud)
我还需要下载其他东西才能直观地看到网络驱动过程吗?提前致谢。
小智 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)
Run Code Online (Sandbox Code Playgroud)