状況は次のとおりです。子プロセスで開かれたSeleniumブラウザを閉じる
WebDriverを開いて処理する子プロセスを作成します。子プロセスは厄介でエラーの可能性があります。その場合、すぐに終了し、メイン関数に制御が戻されます。ただし、この状況では、ブラウザはまだ開いています(子プロセスが完全に終了していないため)。子プロセスで初期化されたブラウザを閉じるにはどうすればよいですか?私がこれまで試した
アプローチ:
1)主な機能にwebdriverを初期化し、引数として子プロセスに渡します。
2)キューを使用して子プロセスと親プロセスの間でwebdriverを渡します。
コード:あなたは、新しいブラウザを開いたときにwebdriverをのプロセスIDを取得し、)(FOOで
:
import multiprocessing
def foo(queue):
driver = webdriver.Chrome()
queue.put(driver)
# Do some other stuff
# If finicky stuff happens, this driver.close() will not run
driver.close()
if __name__ == '__main__':
queue = multiprocessing.Queue()
p = multiprocessing.Process(target=foo, name='foo', args=(queue,))
# Wait for process to finish
# Try to close the browser if still open
try:
driver = queue.get()
driver.close()
except:
pass
閉じるブラウザにdriver.quit()メソッドを使用できます。 – Piyush
いいえ、ブラウザを閉じることはできません。ドライバーは子プロセスで初期化されることがあり、時々ハングすることがあります。これは、1)driver.quit()がfoo()に置かれても必ず到達するとは限りません、2)ドライバーが別々の場所に初期化されているので、driver.quit()はmain関数に入れても意味がありませんプロセス。 –