启动 Chrome 并尝试使用 ChromeDriver 使用 Selenium 访问网页时如何解决“获取默认适配器失败”错误

Abu*_*Abu 13 python selenium google-chrome selenium-chromedriver selenium-webdriver

我已经更新了 Selenium,但即使加载了网页,错误也会不断发生。但是,在某些情况下,驱动程序启动但停滞不前。这是否会导致问题,如果是,我该如何解决?

[11556:9032:0502/152954.314:ERROR:device_event_log_impl.cc(162)] [15:29:54.314] Bluetooth: bluetooth_adapter_winrt.cc:1055 Getting Default Adapter failed.
Run Code Online (Sandbox Code Playgroud)

Deb*_*anB 19

这个错误信息...

ERROR:device_event_log_impl.cc(162)] [15:29:54.314] Bluetooth: bluetooth_adapter_winrt.cc:1055 Getting Default Adapter failed.
Run Code Online (Sandbox Code Playgroud)

...暗示ScopedClosureRunner on_initBluetoothAdapterWinrt::OnGetDefaultAdapter().


分析

此错误在bluetooth_adapter_winrt.cc 中定义如下:

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

解决方案

确保这件事:


其他注意事项

然而,据观察,可以通过在 Linux 上以root用户 ( administrator)身份运行 Chrome 来抑制此错误。但这与ChromeDriver - WebDriver for Chrome中提到的文档有偏差:

Chrome 在启动期间崩溃的一个常见原因是在 Linux 上以 root 用户(管理员)身份运行 Chrome。虽然可以通过在创建WebDriver会话时传递“--no-sandbox”标志来解决此问题,即ChromeDriver会话作为此类配置不受支持且极不鼓励。

理想情况下,您需要将环境配置为以普通用户身份运行 Chrome。


抑制错误

最后,根据Selenium Chrome 驱动程序:解决有关注册表项和实验选项的错误消息中的文档,可以通过添加参数来抑制这些错误日志:

excludeSwitches: ['enable-logging']
Run Code Online (Sandbox Code Playgroud)

所以你的有效代码块将是:

from selenium import webdriver

options = webdriver.ChromeOptions() 
options.add_experimental_option("excludeSwitches", ["enable-logging"])
driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
driver.get("https://www.google.com/")
Run Code Online (Sandbox Code Playgroud)