Selenium/ChromeDriverをHeadlessモード起動→ログ非表示にする[Windows]

- Python -
2020.08.07
Python[パイソン]

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)メソッドがあるので探します。

seleniumのターミナルログ非表示

これを、一部分だけ追記して変更します。

以下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)

これでプログラムを実行すると、コマンドプロンプトへのログ表示がされなくなっているはずです。

↑TOP