Selenium/ChromeDriverをHeadlessモード起動→ログ非表示にする[Windows]
Windows7/10環境、SeleniumとChromeDriverのHeadlessモードを使ってPythonでブラウザ動作を自動化しようとした時に、
コマンドプロンプトに以下赤文字ログが大量に出力される↓
C:\Users\me\Downloads>python app.py
サイトへログイン開始...
DevTools listening on ws://127.0.0.1:60269/devtools/browser/d3770913-ba3b-48d9-8bee-e2a8be88580a
[0714/004556.785:INFO:CONSOLE(2)] "RAPID WARNING: Specified module not in DOM: noticeBox", source: https://.......... (2)
サイトへログイン成功。
処理対象ページを検索中.....。
[0714/004607.995:INFO:CONSOLE(1)] "A parser-blocking, cross site (i.e. differenteTLD+1) script, https://.........., is invoked via document.write. The network request for this script MAYbe blocked by the browser in this or a future page load due to poor network connectivity. If blocked in this page load, it will be confirmed in a subsequent console message. See https://www.chromestatus.com/feature/5718547946799104 for moredetails.", source: https://.......... (1)
[0714/004607.997:INFO:CONSOLE(1)] "A parser-blocking, cross site...(以下略)
というのが不都合でした。これを非表示にしたい。
日本語で簡潔な方法がヒットしなかったので、メモ。
【手順】WindowsでChromeDriverをHeadlessモード起動した時のコマンドプロンプトのログ非表示化
以下stackoverflowにある回答をもとにしています。
How I can hide chromedriver log on console through selenium p
まず、自分の環境でPythonがインストールされているフォルダの中で、以下seleniumのモジュールファイルを探してエディタで開きます。
Lib\site-packages\selenium\webdriver\common\services.py
メモ:
僕はPythonをPrograms配下にインストールしたので、以下パスにseleniumのservices.pyがありました。
\Programs\Python\Python38-32\Lib\site-packages\selenium\webdriver\common\services.py
services.pyを開くと、以下のように60行目付近にdef start(self)メソッドがあるので探します。
これを、一部分だけ追記して変更します。
以下16行目のキーワード引数"creationflags"の1行を追加して保存するだけです。
service.pydef start(self):
"""
Starts the Service.
:Exceptions:
- WebDriverException : Raised either when it can't start the service
or when it can't connect to the service
"""
try:
cmd = [self.path]
cmd.extend(self.command_line_args())
self.process = subprocess.Popen(cmd, env=self.env,
close_fds=platform.system() != 'Windows',
stdout=self.log_file,
stderr=self.log_file,
creationflags=0x08000000, # !!! 追加 !!!
stdin=PIPE)
これでプログラムを実行すると、コマンドプロンプトへのログ表示がされなくなっているはずです。