技術的な話

seleniumが標準出力するログを停止させたい

現象

タイトル通りです。

検索してみると、Windows上でのコンソール非表示の方法ばかりで、Linux環境の情報が無かったのと、少し手こずったので備忘録として記載します。

環境

以下記事で作成した環境になります。

  • Ubuntu 18.04
  • Google Chrome
  • Google Chrome Driver
  • Python 3.9.10
  • selenium 4.1.2

状況と方針

  • loggingモジュールでログ出力を行っている
  • それ以外に標準出力で何か出力される
  • こちらがログ出力したもの以外は表示したくない

といった感じです。以下のように表示されます。

こちらが出力しているログに合わせて同じログが出力されます…。

root@a4602dc85bf0:/app# python3 main.py 
[2022-03-02 00:40:18][root][main][main][INFO] prepare chrome driver.
[2022-03-02 00:40:18][WDM][logger][log][INFO] 
====== WebDriver manager ======
[2022-03-02 00:40:18][WDM][logger][log][INFO] ====== WebDriver manager ======
Current google-chrome version is 98.0.4758
[2022-03-02 00:40:19][WDM][logger][log][INFO] Current google-chrome version is 98.0.4758
Get LATEST chromedriver version for 98.0.4758 google-chrome
[2022-03-02 00:40:19][WDM][logger][log][INFO] Get LATEST chromedriver version for 98.0.4758 google-chrome
Trying to download new driver from https://chromedriver.storage.googleapis.com/98.0.4758.102/chromedriver_linux64.zip
[2022-03-02 00:40:19][WDM][logger][log][INFO] Trying to download new driver from https://chromedriver.storage.googleapis.com/98.0.4758.102/chromedriver_linux64.zip
Driver has been saved in cache [/root/.wdm/drivers/chromedriver/linux64/98.0.4758.102]
[2022-03-02 00:40:30][WDM][logger][log][INFO] Driver has been saved in cache [/root/.wdm/drivers/chromedriver/linux64/98.0.4758.102]

改善方法

WDM(WebDriverManager)が標準でログ出力している様子なので、それを抑えてあげる必要があります。ChromeDriverManagerを起動させる際に下記2点の設定を行います。

  • log_level
  • print_first_line

下記コードの中段にあるのが対象のコードです。

log_levelは名称通りでログの出力レベルです。今回はWARNINGに設定しています。

print_first_lineはWDM起動時のコンソール出力で空行を入れる?ような設定になっています。これをFalseに設定することでその辺を抑えてくれます。

# importは省略

# option
options = Options()
options.binary_location = "/opt/google/chrome/google-chrome"
options.add_argument("--headless")
options.add_argument("--no-sandbox")
options.add_argument("--window-size=1280,1024")

# suppress chrome driver console logs
service = Service(
    executable_path=ChromeDriverManager(
        log_level=logging.WARNING, print_first_line=False).install())

# ssl error
capabilities = DesiredCapabilities.CHROME.copy()
capabilities["acceptInsecureCerts"] = True
# Webdriver ManagerでChromeDriverを取得
driver = webdriver.Chrome(service=service, options=options, desired_capabilities=capabilities)

ちなみにServiceにChromeDriverManagerを設定するのはseleniumの4.0以降の書き方だった気がするので、4.0以前を使用されている方はちょっと書き方が異なるかもしれません。

以下のような感じで書いた記憶があります。

# importは省略

# Webdriver ManagerでChromeDriverを取得
driver = webdriver.Chrome(
    ChromeDriverManager(
        log_level=logging.WARNING, print_first_line=False).install(),
        options=options, desired_capabilities=capabilities)

お困りの方は試してみてもらえればと思います。

-技術的な話
-, , ,