[英]RSelenium UnknownError - java.lang.IllegalStateException with Google Chrome
我正在運行基於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位)的過程:
checkForServer()
。 創建批處理文件以啟動Selenium服務器。 我最初嘗試使用R腳本中的startServer()
,但它經常會卡住而不會繼續執行腳本中的下一行。 這是我創建的批處理文件:
java -jar C:\\path\\to\\selenium-server-standalone.jar -Dwebdriver.chrome.driver=C:\\path\\to\\chromedriver.exe
ChromeDriver可以放在PATH環境變量中,但我決定將ChromeDriver的路徑添加到批處理文件中(它實現了相同的目標)。
運行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)
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.