【问题标题】:Correct way to completely end an RSelenium session?完全结束 RSelenium 会话的正确方法?
【发布时间】:2021-02-26 05:28:45
【问题描述】:

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

背景

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

到目前为止我所知道的

RSelenium docs,展示了关闭整个流程某些部分的两种方法:

方法一

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()

方法一

移除rD(远程驱动)对象,并调用垃圾回收:

# if user forgets to stop server it will be garbage collected.
rD <- rsDriver()
rm(rD)
gc(rD)

我发现的另一件事 (from a similar question about python) 是 rD$client$quit()

问题

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

【问题讨论】:

标签: r rselenium


【解决方案1】:

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

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

system("taskkill /im java.exe /f", intern=FALSE, ignore.stdout=FALSE)

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

【讨论】:

    【解决方案2】:

    我必须更进一步才能运行下一个脚本而不会遇到任何错误。

    我的解决方案是在最后运行以下命令

    remD$closeWindow()
    
    rD1 <- rD1$server$stop()
    
    remD$closeall()
    
    system("taskkill /im java.exe /f", intern=FALSE, ignore.stdout=FALSE)
    system("taskkill /F /IM ChromeDriver.exe", intern=FALSE, ignore.stdout=FALSE) 
    

    【讨论】:

      猜你喜欢
      • 2013-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      • 2017-07-18
      相关资源
      最近更新 更多