我在RSelenium中使用以下代码来打开浏览器.关闭浏览器,甚至通过运行remDr $ close()关闭处理程序后,该端口仍在使用中.我必须去终端并手动终止进程,以便相同的端口可用.是否有任何自动化方式使RSelenium在完成抓取后使端口自由?
所以这是我的代码:
library(RSelenium)
rD <- rsDriver(verbose = FALSE,port=4444L)
remDr <- rD$client
remDr$close()
Run Code Online (Sandbox Code Playgroud)
谢谢
jdh*_*son 18
该过程由服务器(Selenium Server)和客户端(您启动的浏览器)两部分组成.closeremoteDriver类的方法关闭客户端(浏览器).完成后还需要停止服务器.
完成后停止服务器:
library(RSelenium)
rD <- rsDriver(verbose = FALSE,port=4444L)
remDr <- rD$client
remDr$close()
Run Code Online (Sandbox Code Playgroud)
现在要么显式停止服务器:
rD$server$stop()
Run Code Online (Sandbox Code Playgroud)
或者如果rD删除了该对象,则在收集垃圾时将停止服务器:
library(RSelenium)
rD <- rsDriver(verbose = FALSE,port=4444L)
remDr <- rD$client
remDr$close()
rm(rD)
gc()
Run Code Online (Sandbox Code Playgroud)
Seb*_*ISU 17
直到最近我才遇到问题。对我有用的是使用上面的解决方案,并根据此线程中的解决方案添加一行来杀死 RStudio 中的 Java 实例。
remDr$close()
rD$server$stop()
rm(rD, remDr)
gc()
system("taskkill /im java.exe /f", intern=FALSE, ignore.stdout=FALSE)
Run Code Online (Sandbox Code Playgroud)
命令:
system("taskkill /im java.exe /f", intern=FALSE, ignore.stdout=FALSE)
Run Code Online (Sandbox Code Playgroud)
将释放所有端口。
如果你想释放一个特定的端口,你可以这样做:
#获取你启动的进程的PID
pid <- driver$server$process$get_pid()
Run Code Online (Sandbox Code Playgroud)
#在下面的命令中粘贴这个PID(也会杀死所有的子进程,关闭浏览器)
system(paste0("Taskkill /F /T" ," /PID ", pid))
Run Code Online (Sandbox Code Playgroud)
避免此问题的一种方法是使用free_port()查找空闲端口(而不是手动指定)
library(netstat)
rsDriver(verbose = FALSE, port=free_port())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5740 次 |
| 最近记录: |