RSelenium:服务器信号端口已在使用中

Moh*_*mad 12 r rselenium

我在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)

  • 你好。这两个ac都试过几次了,不行。浏览器关闭,但是当我尝试重新启动 rD 对象时,我总是收到端口 4567)已在使用中的错误。只有完全退出 R 会话才能释放它。 (5认同)

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)


Yug*_*esh 7

命令:

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)


use*_*745 5

避免此问题的一种方法是使用free_port()查找空闲端口(而不是手动指定)

library(netstat)
rsDriver(verbose = FALSE, port=free_port())
Run Code Online (Sandbox Code Playgroud)