RSelenium:服务器信号端口已被使用
RSelenium: server signals port is already in use
我在 RSelenium 中使用以下代码打开浏览器。在我关闭浏览器,甚至通过 运行 remDr$close() 关闭处理程序后,该端口仍在使用中。我必须去终端并手动终止进程,以便相同的端口可用。是否有任何自动化方法可以让 RSelenium 在完成抓取后释放端口?
这是我的代码:
library(RSelenium)
rD <- rsDriver(verbose = FALSE,port=4444L)
remDr <- rD$client
remDr$close()
谢谢
该进程由服务器(Selenium Server)和客户端两部分组成
(您启动的浏览器)。 remoteDriver class 的 close
方法关闭客户端(浏览器)。完成后还需要停止服务器。
完成后停止服务器:
library(RSelenium)
rD <- rsDriver(verbose = FALSE,port=4444L)
remDr <- rD$client
remDr$close()
现在要么明确停止服务器:
rD$server$stop()
或者如果 rD
对象被删除,服务器将在垃圾收集时停止:
library(RSelenium)
rD <- rsDriver(verbose = FALSE,port=4444L)
remDr <- rD$client
remDr$close()
rm(rD)
gc()
对我有用的是根本不调用停止而只调用关闭。
rD <- rsDriver(port = 4444L)
remDr <- rD[["client"]]
remDr$close()
rm(rD)
gc()
编辑:没关系 - 这上周工作了几次,然后又没有工作了。
直到最近我才遇到问题。对我有用的是使用上面的解决方案并根据此 thread 中的解决方案添加一行以杀死 RStudio 中的 Java 个实例。
remDr$close()
rD$server$stop()
rm(rD, remDr)
gc()
system("taskkill /im java.exe /f", intern=FALSE, ignore.stdout=FALSE)
命令:
system("taskkill /im java.exe /f", intern=FALSE, ignore.stdout=FALSE)
将释放所有端口。
如果你想释放一个特定的端口,你可以这样做:
#获取你启动的进程的PID
pid <- driver$server$process$get_pid()
#将此 PID 粘贴到以下命令中(也将杀死所有子进程,同时关闭浏览器)
system(paste0("Taskkill /F /T" ," /PID ", pid))
避免此问题的一种方法是使用 free_port()
查找空闲端口(而不是手动指定)
library(netstat)
rsDriver(verbose = FALSE, port=free_port())
我尝试了一个类似脚本的所有版本:
driver = rsDriver(browser = c("firefox"))
remDr <- driver[["client"]]
... ,在某个时候开始出现下一个错误:
Error in wdman::selenium(port = port, verbose = verbose, version = version,
: Selenium server signals port = 4567 is already in use.
关闭端口 4567
的建议均无效,除了指定不同的端口外,也没有重新启动浏览器和 RStudio。
driver = rsDriver(browser = c("firefox"), verbose = FALSE, port = 4444L)
remDr <- driver[["client"]]
端口列表(例如 4445L、4446L、4447L 等)也适用
要么
按 Ctrl
+ Shift
+ F10
重新加载会话
我在 RSelenium 中使用以下代码打开浏览器。在我关闭浏览器,甚至通过 运行 remDr$close() 关闭处理程序后,该端口仍在使用中。我必须去终端并手动终止进程,以便相同的端口可用。是否有任何自动化方法可以让 RSelenium 在完成抓取后释放端口?
这是我的代码:
library(RSelenium)
rD <- rsDriver(verbose = FALSE,port=4444L)
remDr <- rD$client
remDr$close()
谢谢
该进程由服务器(Selenium Server)和客户端两部分组成
(您启动的浏览器)。 remoteDriver class 的 close
方法关闭客户端(浏览器)。完成后还需要停止服务器。
完成后停止服务器:
library(RSelenium)
rD <- rsDriver(verbose = FALSE,port=4444L)
remDr <- rD$client
remDr$close()
现在要么明确停止服务器:
rD$server$stop()
或者如果 rD
对象被删除,服务器将在垃圾收集时停止:
library(RSelenium)
rD <- rsDriver(verbose = FALSE,port=4444L)
remDr <- rD$client
remDr$close()
rm(rD)
gc()
对我有用的是根本不调用停止而只调用关闭。
rD <- rsDriver(port = 4444L)
remDr <- rD[["client"]]
remDr$close()
rm(rD)
gc()
编辑:没关系 - 这上周工作了几次,然后又没有工作了。
直到最近我才遇到问题。对我有用的是使用上面的解决方案并根据此 thread 中的解决方案添加一行以杀死 RStudio 中的 Java 个实例。
remDr$close()
rD$server$stop()
rm(rD, remDr)
gc()
system("taskkill /im java.exe /f", intern=FALSE, ignore.stdout=FALSE)
命令:
system("taskkill /im java.exe /f", intern=FALSE, ignore.stdout=FALSE)
将释放所有端口。
如果你想释放一个特定的端口,你可以这样做:
#获取你启动的进程的PID
pid <- driver$server$process$get_pid()
#将此 PID 粘贴到以下命令中(也将杀死所有子进程,同时关闭浏览器)
system(paste0("Taskkill /F /T" ," /PID ", pid))
避免此问题的一种方法是使用 free_port()
查找空闲端口(而不是手动指定)
library(netstat)
rsDriver(verbose = FALSE, port=free_port())
我尝试了一个类似脚本的所有版本:
driver = rsDriver(browser = c("firefox"))
remDr <- driver[["client"]]
... ,在某个时候开始出现下一个错误:
Error in wdman::selenium(port = port, verbose = verbose, version = version,
: Selenium server signals port = 4567 is already in use.
关闭端口 4567
的建议均无效,除了指定不同的端口外,也没有重新启动浏览器和 RStudio。
driver = rsDriver(browser = c("firefox"), verbose = FALSE, port = 4444L)
remDr <- driver[["client"]]
端口列表(例如 4445L、4446L、4447L 等)也适用
要么
按 Ctrl
+ Shift
+ F10