RSelenium UnknownError — java.lang.IllegalStateException с Google Chrome

Я запускаю следующий сценарий на основе страницы CRAN RSelenium Basics. :

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, поэтому, похоже, это не имеет значения. Что я делаю не так?


person hfisch    schedule 29.06.2015    source источник
comment
У вас есть chromedriver, доступный откуда-то в вашем PATH. sites.google.com/a/chromium.org/chromedriver   -  person jdharrison    schedule 30.06.2015


Ответы (2)


Наконец-то мне удалось заставить RSelenium работать, собрав воедино информацию из нескольких разных источников. Я думаю, что было бы полезно иметь всю эту информацию в одном месте, поэтому вот процесс, через который я прошел, чтобы заставить RSelenium работать в Windows 7 (64-разрядная версия) с Chrome в качестве браузера:

  1. Загрузите 64-разрядную версию Java. Мне не удалось найти ничего для работы стандартная загрузка.
  2. Загрузите ChromeDriver.
  3. Загрузите Selenium Standalone Server или запустите checkForServer() из R.
  4. Создайте пакетный файл для запуска сервера Selenium. Сначала я пытался использовать startServer() из сценария R, но он часто зависал и не переходил к следующей строке сценария. Вот пакетный файл, который я создал:

    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() был необходим, потому что я получил бы ошибку в вызове remoteDriver(), если бы он запускался до завершения запуска Selenium Server.

person hfisch    schedule 02.07.2015

Стоит отметить, что у RSelenium есть несколько досадных отличий от OSX. Аргументы invisible=T/silent=T не будут работать при запуске файла yourcommand.command и метода remDr$open() соответственно. Невидимый = T на самом деле напомнит вам, что он работает только в Windows. Не так уж и много (и если у кого-то есть обходной путь, я был бы признателен).

Ради потомства вот небольшая вариация для OSX, чтобы заменить shell.exec, используя файл .command вместо .bat с тем же содержимым, что и выше:

содержимое файла 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)
...
person asbiv    schedule 19.05.2016