我在RSelenium中使用以下代码打开浏览器。关闭浏览器,甚至通过运行remDr $ close()关闭处理程序后,该端口仍在使用中。我必须去终端并手动终止进程,以便相同的端口可用。是否有任何自动化方式使得RSelenium在完成抓取后使端口自由?
所以这是我的代码:
library(RSelenium)
rD <- rsDriver(verbose = FALSE,port=4444L)
remDr <- rD$client
remDr$close()
由于
答案 0 :(得分:11)
该过程由服务器(Selenium Server)和客户端两部分组成
(您启动的浏览器)。 remoteDriver类的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()
答案 1 :(得分:11)
直到最近我才有问题。对我有用的是使用上面的解决方案以及该thread中的解决方案,添加一行内容以杀死RStudio内部的Java实例。
remDr$close()
driver$server$stop()
rm(driver, remDr)
gc()
system("taskkill /im java.exe /f", intern=FALSE, ignore.stdout=FALSE)
答案 2 :(得分:4)
命令:
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))
答案 3 :(得分:2)
对我有用的是根本不叫停,而只叫关闭。
rD <- rsDriver(port = 4444L)
remDr <- rD[["client"]]
remDr$close()
rm(rD)
gc()
编辑:没关系-上周该方法工作了好几次,然后再没有起作用。
答案 4 :(得分:2)
避免此问题的一种方法是使用free_port()
查找空闲端口(而不是手动指定)
library(netstat)
rsDriver(verbose = FALSE,port=free_port())