完全结束 RSelenium 会话的正确方法?

use*_*745 5 r rselenium

从 R 完全结束 RSelenium 会话(包括其所有组成部分)的“正确”方法是什么?

背景

当使用 RSelenium 进行浏览器自动化时,有许多技术相互作用,有时会产生奇怪的错误,其中 R 会话中的所有内容都被清理,但某些底层 chrome / chromedriver / phantom.js / selenium /(其他?)进程还没有' t结束了。当尝试将来的 RSelenium 会话时,这可能会导致问题。

到目前为止我所知道的

RSelenium 文档展示了两种关闭整个过程某些部分的方法:

方法一

close浏览器,然后是stop服务器:

# start a chrome browser
rD <- rsDriver()
remDr <- rD[["client"]]
remDr$navigate("http://www.google.com/ncr")
remDr$navigate("http://www.bbc.com")
remDr$close()

# stop the selenium server
rD[["server"]]$stop()
Run Code Online (Sandbox Code Playgroud)

方法二

删除rD(远程驱动程序)对象,并调用垃圾收集:

# start a chrome browser
rD <- rsDriver()
remDr <- rD[["client"]]
remDr$navigate("http://www.google.com/ncr")
remDr$navigate("http://www.bbc.com")
remDr$close()

# stop the selenium server
rD[["server"]]$stop()
Run Code Online (Sandbox Code Playgroud)

我发现的另一件事(来自关于 python 的类似问题)是rD$client$quit()

问题

有了这些可用的方法,准确地说应该做什么(即最佳实践)来完全确保 RSelenium 会话(以及连接到该会话的每个进程 - 例如 chrome/chromedriver 等)已完全关闭,因此它不可能干扰与其他 RSelenium 会话?

Wim*_*pel 7

我遇到了问题,Rselenium 会说(开始新会话时)端口仍在使用中,即使在问题中提到的关闭所有内容之后也是如此。

我从这里这里发现你(至少在Windows上)还需要通过以下方式关闭Rstudio中的java会话:

system("taskkill /im java.exe /f", intern=FALSE, ignore.stdout=FALSE)
Run Code Online (Sandbox Code Playgroud)

关闭会话并停止服务器并运行gc()