【Python】Selenium: bluetooth_adapter_winrt.cc: Getting Default Adapter failed(ChromeDriver)

時計 2021.02.04 / 時計

【Python】Selenium: bluetooth_adapter_winrt.cc: Getting Default Adapter failed(ChromeDriver)

本記事ではPythonのSeleniumモジュールからChromeを操作・制御した際に発生する「Bluetooth: bluetooth_adapter_winrt.cc:1072 Getting Default Adapter failed」エラーの解決方法について解説していきます。

Seleniumモジュールはブラウザを自動操作して情報を取得するスクレイピングでよく使用されます。
Seleniumモジュールについては以下記事をご参照ください。

SeleniumによるChrome操作を行うPythonスクリプトをEXE化して実行した際に、コンソール画面に本エラーが発生しました。

プログラム自体は正常に動作しますが、コンソール画面に不要な表示は極力無くしたいので、解決方法を調べて本記事にまとめました。

本記事のプログラムは以下の環境で実行しております。

  • OS:Windows10
  • Google Chrome:88.0.4324.104(Official Build)
  • ChromeDriver:88.0.4324.96
  • Python:Python 3.7.6
  • Selenium:3.141.0

本記事を通して以下の知識を学べます。

学べる知識
  • Getting Default Adapter failedエラーの内容
  • Getting Default Adapter failedエラーの解決方法

Pythonスクリプトの内容

Pythonスクリプトは、Seleniumモジュールを使用してChromeを操作するプログラムです。

配布できるようにPythonスクリプトはEXE化しています。
PythonスクリプトをEXE化する方法は以下記事をご参照ください。

エラーについて

エラー内容

EXE化したPythonスクリプトを実行すると以下のエラーがコンソール画面に表示されます。

Bluetooth: bluetooth_adapter_winrt.cc:1072 Getting Default Adapter failed

エラー文には「Bluettooth側のエラーで、デフォルトアダプターを取得するのに失敗」といった内容が記載されています。

エラー解析

エラーによるとBluetooth_adapter_winrt.ccの1072行目でこのエラーが発生しています。
このファイルの1072行目あたりには次の関数が定義されています。

void BluetoothAdapterWinrt::OnGetDefaultAdapter(
    base::ScopedClosureRunner on_init,
    ComPtr adapter) {
  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
  if (!adapter) {
    BLUETOOTH_LOG(ERROR) << "Getting Default Adapter failed.";
    return;
  }

これより、BluetoothAdapterWinrt::OnGetDefaultAdapter()で失敗して「Getting Default Adapter failed」が表示していたことがわかります。

エラー解決方法

「Getting Default Adapter failed」エラーを解決する方法は2つあります。

  • ChromeOptionにexcludeSwitches: ['enable-logging']を追加する
  • Chromeをrootユーザーで起動する(Linuxのみ)

各方法について解説していきます。

ChromeOptionにexcludeSwitches: ['enable-logging']を追加

「Getting Default Adapter failed」エラーの表示をなくすためには、ChromeOptionにexcludeSwitches: ['enable-logging']を追加することで表示しなくなります。

ChromeOptionへの追加は以下のように記述します。

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-logging"])
driver = webdriver.Chrome(executable_path='chromedriver.exe')

url = "https://office54.net"
driver.get(url)

このオプションを追加するだけでコンソール画面での「Getting Default Adapter failed」エラー表示がなくなります。

Chromeをrootユーザーで起動(Linuxのみ)

OSがLinuxの場合のみ、Chromeをroot(administrator)ユーザーで起動することでエラー表示をなくすことができるみたいです。