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

时间:2015-06-29 20:11:45

标签: java r selenium rselenium

我正在根据RSelenium Basics CRAN page运行以下脚本:

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)

根据this conversation on 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,所以看起来应该没关系。我做错了什么?

2 个答案:

答案 0 :(得分:9)

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

  1. 下载64-bit version of Java我无法使用标准下载。
  2. 下载ChromeDriver
  3. 从R中下载Selenium Standalone Server或运行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()调用中收到错误。

答案 1 :(得分:1)

值得注意的是,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)
...