#はじめに
Pythonでブラウザを自動操作してスクレイピングするプログラムを組んでいたときに、ターミナルに「システムに接続されたデバイスが機能していません。 (0x1F)」というエラーメッセージが出てきて、printメソッドでターミナルに表示した結果とごっちゃになって、邪魔だな~と思っていました。
そのエラーメッセージを消すことができましたので、稚拙ながら紹介したいと思います。
#動作環境
まず私の動作環境を書いておきます。
- Windows 10 Home (64bit)
- Chrome 93.0.4577.82
- chromedriver 93.0.4577.63
- Python 3.8.1
- Selenium 3.141.0
#エラーメッセージ「 システムに接続されたデバイスが機能していません。 (0x1F) 」とは
Python にてブラウザ操作を自動化できるライブラリ Selenium を使って Chrome を起動すると VSCode のターミナルに「システムに接続されたデバイスが機能していません。 (0x1F)」というエラーメッセージが出てきます。
これは WebUSB を使用したデバイスへの接続に問題がない場合はとくにプログラムに影響はなく無視しても構わないエラーメッセージのようです。おそらく WebUSB から制御する USB機器が動作していません的な内容だと思います。
【 WebUSB 】 : Chrome などで利用できる API のこと。WebUSB を使うと Chrome などのブラウザの JavaScript から直接 USB 機器を制御することができるようです。
#エラーメッセージを消す
とくに放っておいても問題ないエラーメッセージのようですが、毎回実行時にターミナルにいちいち出てきては邪魔です。そこで Chrome のオプションを指定してあげることでそれを非表示にすることができます。
from selenium import webdriver
#-------------------------------エラーメッセージを消す-------------------------------
ChromeOptions = webdriver.ChromeOptions()
ChromeOptions.add_experimental_option('excludeSwitches', ['enable-logging'])
#----------------------------------------------------------------------------------
#Chromeを起動する
driver = webdriver.Chrome(executable_path = "PATH", options=ChromeOptions)
#対象URLのページにアクセスする
url = "URL"
driver.get(url)
'enable-logging' とは chromedriver が Chrome にデフォルトでログ出力を有効にする起動オプションのことで、このデフォルトの起動オプションを excludeSwitches オプションで無効化します。これでエラーメッセージを非表示にすることができます。
#ちなみに
オプションに 'enable-automation' を追加することで Chrome 起動時に表示される「 Chrome は自動テストソフトウェアによって制御されています。」という警告も消すことができます。
ChromeOptions.add_experimental_option("excludeSwitches", ['enable-automation', 'enable-logging'])
#参考ページ
- テスト実行警告を非表示、ログを出力しない : https://magenta-magenta.com/2020/11/18/post-1154/
- Edgeでの消し方 : https://miya-mitsu.com/python-0x1ferror/
- WebUSB : https://softengineerblog.com/webusb-wo-sawaru/