web-dev-qa-db-ja.com

Selenium:サーバー信号ポートは既に使用されています

RSeleniumで次のコードを使用してブラウザーを開いています。ブラウザを閉じた後、またはremDr $ close()を実行してハンドラを閉じた後も、ポートはまだ使用中です。同じポートが利用可能になるように、ターミナルに移動してプロセスを手動で強制終了する必要があります。 RSeleniumがスクレイピングの完了後にポートを解放する自動化された方法はありますか?

だからここに私のコードがあります:

library(RSelenium)
rD <- rsDriver(verbose = FALSE,port=4444L)
remDr <- rD$client
remDr$close()

ありがとう

14
Mohammad

プロセスは、サーバー(Seleniumサーバー)とクライアント(ユーザーが開始するブラウザー)の2つの部分で構成されています。 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()
19
jdharrison

私のために働いたのは、ストップを全然呼ぶのではなく、クローズを呼ぶだけです。

rD <- rsDriver(port = 4444L)
remDr <- rD[["client"]]
remDr$close()
rm(rD)
gc()

編集:ネバーマインド-これは先週数回は機能しましたが、その後は機能しませんでした。

1
boutitdoubtit