问题:如果没有打开硒浏览器,是否有一个功能可以打开它,或者关闭当前浏览器并重置端口并重新启动浏览器?
理性:我处理的RSelenium中的大循环有时会崩溃,因此有时我不知道端口是否打开或浏览器是否以循环代码打开。我想要一个RSelenium启动器,它可以启动浏览器,而不管浏览器是否打开或端口是否在使用中。
尝试:我使用tryCatch()尝试了这种方法,但是如果尝试两次启动端口,我仍然会收到wdman错误:端口已打开:
browserpreference <- "chrome"
tryCatch({rD <- rsDriver(port = 4444L, browser = paste0(browserpreference))}
,error=function(rD,remDr){
try(remDr$close(), silent=T)
try(rD$server$stop(),silent=T)
try(suppressWarnings(rm(rD, envir = .GlobalEnv)), silent=T)
try(suppressWarnings(rm(remDr, envir = .GlobalEnv)), silent=T)
gc()
rD <- rsDriver(port = 4444L, browser = paste0(browserpreference))
})
如果我尝试两次,则会出现此错误:
Error in wdman::selenium(port = port, verbose = verbose, version = version, :
Selenium server signals port = 4444 is already in use.
谢谢!
答案 0 :(得分:0)
我遇到了这个问题,这是因为每个孤立端口都留下了Java运行时。杀死所有这些释放端口。使用以下命令终止遗留的Java运行时:
system("taskkill /im java.exe /f", intern=FALSE, ignore.stdout=FALSE)
答案 1 :(得分:0)
这是一个启动RSelenium的函数,无论端口是打开还是关闭都可以工作。
start_selenium <- function(attempted = 0, condition = "Success starting Selenium web driver!", browserpreference = "chrome"){
if(attempted >= 2){
return("Failure starting Selenium web driver: Port in use and Java task kill didn't fix it!")
}
tryCatch({
.GlobalEnv$rD <- rsDriver(port = 4444L, browser = paste0(browserpreference))
.GlobalEnv$driver <- rD[["client"]]
}, error = function(error_condition) {
if(grepl("already in use",error_condition, fixed = TRUE)){
tryCatch(driver$close(),error = function(error_condition){message(error_condition)})
rD[["server"]]$stop()
system("taskkill /im java.exe /f", intern=FALSE, ignore.stdout=FALSE)
attempted <- attempted + 1
condition <<- start_selenium(attempted)
}
})
return(condition)
}