初心者で恐縮ですがよろしくお願いします。
環境
windows10
apache(xammp)
FireFox webdriver
要約: pythonでwindowsのコマンドを実行するsubprocess.Popen('taskkill /im geckodriver.exe /f', shell=True)
を書いてもプロセスがkillできない。タスクマネージャーから手動で削除できる。Edgeで実行すると取得できます。
seleniumでプロセスが残ってしまうという問題をしらべてみるとたくさん出てきますが、driver.quitすれば良いくらいしか書いておらず、実際そうやっても残ってしまうため、subprocessでコマンドを実行してプロセスをkillしています。しかしそれでもバックグラウンドプロセスが残ってしまい、Firefoxやクロームで実行するとタブのくるくるがずっと回りっぱなしでdoneが返ってきません(なぜかEdgeで実行すると取得できます)。プロセスツリーをkillするはずのtaskkill /im geckodriver.exe /f
をしてもプロセスが残るのはなぜでしょうか?また、そもそもquitすればプロセスをkillできるはずですが、quitしてもprocessが残ってしまうのはなぜでしょうか?
python3
1async def create_driver(url, loop=None): 2 options = Options() 3 options.add_argument('--headless') 4 webdriver.Firefox(options=options) 5 driver = webdriver.Firefox(executable_path=r'C:\xampp\cgi-bin\geckodriver-v0.23.0-win64\geckodriver') 6 loop.call_soon(functools.partial(driver.get, url)) 7 return driver 8 9urls = ['https://www.yahoo.co.jp/','https://teratail.com/'] 10loop = asyncio.get_event_loop() 11done, pending = loop.run_until_complete(asyncio.wait([create_driver(url, loop) for url in urls])) 12 13print(done) 14for i in done: 15 i.result().quit() 16 17subprocess.Popen('taskkill /im geckodriver.exe /f', shell=True)
↓実行前(Firefoxで実行しました。GUIで起動中のFirefoxのプロセスしかありません。)
↓実行中
↓実行後(バックグラウンドに2つgeckodriverが残っています。これを手動で削除するとタブのクルクルがなくなり値が返ってきます。)
以下追記
コマンドプロンプトから直接入力した結果
taskkill /im geckodriver.exe /f
エラー: プロセス "geckodriver.exe" が見つかりませんでした。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/09 03:16
2019/01/09 03:41
2019/01/09 03:48
2019/01/09 13:38
2019/01/09 13:39