浏览器能否在后台从 RSelenium 运行 调用
Can browser called from RSelenium run in the backround
我正在 windows 7 机器上工作。是否可以从 RSelenium 库 运行 remoteDriver()$open() 并让浏览器 运行 在后台(即不可见)。
谢谢
是的,这是可能的。 RSelenium
的默认浏览器是 Firefox。但是,RSelenium
甚至支持使用 PhantomJS
的无头浏览,这在 respective vignette 中有详细描述。
一般来说,要利用 Windows 7 下的 PhanomJS
,您只需要
- download PhantomJS 并将文件夹路径添加到
phantomjs.exe
作为系统 Environment Variable
菜单中用户或系统 PATH 变量的附加条目(例如 C:\Program Files\phantomjs-1.9.7-windows
) 注意:phantomjs.exe
本身不是路径规范的一部分。
- 替换代码开头和结尾的代码片段,如下所述
默认浏览:
checkForServer()
startServer()
remDrv <- remoteDriver()
remDrv$open()
...
remDrv$quit()
remDrv$closeServer()
无头浏览:
pJS <- phantom()
remDrv <- remoteDriver(browserName = 'phantomjs')
remDrv$open()
...
remDrv$close()
pJS$stop()
其他建议
命令行参数和 POODLE
注意可以传递给 phantom
的 command line arguments。
例如,PhantomJS 默认使用 SSLv3,自 POODLE 以来,每个服务器都不鼓励这样做。
解决方法是用 --ssl-protocol=tlsv1
:
调用 phantom
pJS <- phantom(extras = c('--ssl-protocol=tlsv1'))
时间问题
PhantomJS 经常发生的一件事是时间问题。与 Firefox 和 Chrome 等浏览器一起使用的代码会因 PhantomJS 而中断,因为 PhantomJS 太快了。
您可以通过在不同的 remoteDriver
调用之间放置 Sys.sleep
调用来解决此问题。
我正在 windows 7 机器上工作。是否可以从 RSelenium 库 运行 remoteDriver()$open() 并让浏览器 运行 在后台(即不可见)。
谢谢
是的,这是可能的。 RSelenium
的默认浏览器是 Firefox。但是,RSelenium
甚至支持使用 PhantomJS
的无头浏览,这在 respective vignette 中有详细描述。
一般来说,要利用 Windows 7 下的 PhanomJS
,您只需要
- download PhantomJS 并将文件夹路径添加到
phantomjs.exe
作为系统Environment Variable
菜单中用户或系统 PATH 变量的附加条目(例如C:\Program Files\phantomjs-1.9.7-windows
) 注意:phantomjs.exe
本身不是路径规范的一部分。 - 替换代码开头和结尾的代码片段,如下所述
默认浏览:
checkForServer()
startServer()
remDrv <- remoteDriver()
remDrv$open()
...
remDrv$quit()
remDrv$closeServer()
无头浏览:
pJS <- phantom()
remDrv <- remoteDriver(browserName = 'phantomjs')
remDrv$open()
...
remDrv$close()
pJS$stop()
其他建议
命令行参数和 POODLE
注意可以传递给 phantom
的 command line arguments。
例如,PhantomJS 默认使用 SSLv3,自 POODLE 以来,每个服务器都不鼓励这样做。
解决方法是用 --ssl-protocol=tlsv1
:
phantom
pJS <- phantom(extras = c('--ssl-protocol=tlsv1'))
时间问题
PhantomJS 经常发生的一件事是时间问题。与 Firefox 和 Chrome 等浏览器一起使用的代码会因 PhantomJS 而中断,因为 PhantomJS 太快了。
您可以通过在不同的 remoteDriver
调用之间放置 Sys.sleep
调用来解决此问题。