RSelenium UnknownError – 使用谷歌浏览器的java.lang.IllegalStateException

我正在运行基于RSelenium Basics CRAN页面的以下脚本:

library(RSelenium) startServer(args = c("-port 4455"), log = FALSE, invisible = FALSE) remDr <- remoteDriver(browserName = "chrome") remDr$open() 

这会产生以下错误:

 Exception in thread "main" java.net.BindException: Selenium is already running on port 4444. Or some other service is. at org.openqa.selenium.server.SeleniumServer.start(SeleniumServer.java:492) at org.openqa.selenium.server.SeleniumServer.boot(SeleniumServer.java:305) at org.openqa.selenium.server.SeleniumServer.main(SeleniumServer.java:245) at org.openqa.grid.selenium.GridLauncher.main(GridLauncher.java:64) 

根据GitHub上这个对话的评论,我修改了我的startServer()命令,如下所示:

 startServer(args = c("-port 4455"), log = FALSE, invisible = FALSE) 

然后我在我的控制台中收到以下错误:

 Error: Summary: UnknownError Detail: An unknown server-side error occurred while processing the command. class: java.lang.IllegalStateException 

弹出的Java提示中出现此错误:

 14:38:55.098 INFO - Launching a standalone Selenium Server 14:38:55:161 INFO - Java: Oracle Corporation 25.40-b25 14:38:55.161 INFO - OS: Windows 7 6.1 amd64 14:38:55.161 INFO - v2.46.0, with Core v2.46.0. Built from revision 87c69e2 14:38:55.209 INFO - Driver class not found: com.opera.core.systems.OperaDriver 14:38:55.209 INFO - Driver provider com.opera.core.systems.OperaDriver is not registered 14:38:55:289 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4455/wd/hub 14:38:55:289 INFO - Selenium Server is up and running 

我不确定缺少Opera驱动程序是一个实际错误还是只是一个警告。 无论如何,我想使用Chrome,所以看起来应该没关系。 我究竟做错了什么?

我终于能够通过拼接来自许多不同来源的信息来使RSelenium工作。 我认为将所有这些信息放在一个位置会很有帮助,所以这是我通过Chrome浏览器将RSelenium用于Windows 7(64位)的过程:

  1. 下载64位版本的Java 。 我无法使用标准下载。
  2. 下载ChromeDriver 。
  3. 下载Selenium Standalone Server或从R运行checkForServer()
  4. 创建批处理文件以启动Selenium服务器。 我最初尝试从R脚本使用startServer() ,但它经常会卡住而不会继续执行脚本中的下一行。 这是我创建的批处理文件:

     java -jar C:\path\to\selenium-server-standalone.jar -Dwebdriver.chrome.driver=C:\path\to\chromedriver.exe 

    ChromeDriver可以放在PATH环境变量中,但我决定在ChromeDriver的路径中添加批处理文件(它实现了相同的目标)。

  5. 运行R脚本。 这是我的最终脚本:

     library(RSelenium) shell.exec(paste0("C:\\path\\to\\yourbatchfile.bat")) Sys.sleep(5) remDr <- remoteDriver(browserName = "chrome") remDr$open(silent = TRUE) remDr$navigate("http://www.google.com") 

    Sys.sleep()调用是必要的,因为如果它在Selenium Server完成启动之前运行,我将在remoteDriver()调用中收到错误。

值得注意的是,RSelenium对OSX有一些烦人的差异。 当您分别运行yourcommand.command文件和remDr $ open()方法时,invisible = T / silent = T参数将不起作用。 invisible = T实际上会提醒您它只适用于Windows。 没有什么大不了的(如果有人有解决方法,我会很感激)。

为了后人的缘故,OSX使用.command文件而不是.bat替换shell.exec的内容略有不同,其内容与上面相同:

yourcommand.command文件内容

 java -jar /path/to/selenium-server-standalone.jar -Dwebdriver.chrome.driver=/path/to/chromedriver 

R脚本修改

 library(RSelenium) system(paste("open","/path/to/yourcommand.command")) Sys.sleep(5) ...