【问题标题】:How to address the error EGL Driver message (Error) eglQueryDeviceAttribEXT: Bad attribute using Selenium and Python如何解决错误 EGL Driver message (Error) eglQueryDeviceAttribEXT: Bad attribute using Selenium and Python
【发布时间】:2019-07-18 08:31:34
【问题描述】:

我从 selenium 收到随机错误消息,即使它们都与我正在运行的确切 Web 驱动程序命令无关(我不知道)。

此错误不会中断程序,它只是添加了不需要的警报(使我的打印件更难阅读)。

  • Chrome 版本:75.0.3770.100(官方版本)(64 位)
  • Python 版本:3.6.1
  • Chrome 驱动版本:75.0.3770.140

我已经添加了以下代码,但仍然出现错误。

options.add_argument("--log-level=3")

错误:

gl_surface_egl.cc(544) - EGL Driver message (Error) eglQueryDeviceAttribEXT: Bad attribute.

【问题讨论】:

    标签: python selenium google-chrome selenium-chromedriver egl


    【解决方案1】:

    此随机错误消息...

    gl_surface_egl.cc(544) - EGL Driver message (Error) eglQueryDeviceAttribEXT: Bad attribute.
    

    ...来自LogEGLDebugMessage() 方法,因为GL Switches 之一出现错误

    这个错误在gl_surface_egl.cc中定义如下:

    static void EGLAPIENTRY LogEGLDebugMessage(EGLenum error,
                           const char* command,
                           EGLint message_type,
                           EGLLabelKHR thread_label,
                           EGLLabelKHR object_label,
                           const char* message) {
      std::string formatted_message = std::string("EGL Driver message (") +
                      GetDebugMessageTypeString(message_type) +
                      ") " + command + ": " + message;
    

    深入研究

    根据List of Chromium Command Line Switches 中的文档,--use-gl 参数选择应该使用 GPU 进程的 GL 实现,可用选项有:

    • 桌面:用户安装的任何桌面 OpenGL(Linux 和 Mac 默认)。
    • egl:用户安装的任何 EGL / GLES2(Windows 默认 - 实际上是 ANGLE)。
    • swiftshader:SwiftShader 软件渲染器。

    DEBUG 消息无害,您可以继续进行测试。


    解决方案

    如果您的用例涉及调用click()send_keys() 方法,则需要为element_to_be_clickable() 诱导WebDriverWait,如下所示:

    • 调用click():

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "element_css"))).click()
      
    • 调用send_keys():

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "element_xpath"))).send_keys("Joseph Jones")
      

    额外考虑

    此错误可能是由ES2-only 设备启动的应用程序引起的,即使清单需要ES3 功能。将 EGL_RENDERABLE_TYPEEGL_OPENGL_ES2_BIT 更新为 EGL_OPENGL_ES3_BIT 将解决此问题。

    【讨论】:

      【解决方案2】:

      chrome://gpu 页面是一个很好的线索。 我的经验是:在设置菜单中禁用硬件加速会导致错误消息停止,但是让我用作基准测试的 Babylon.js 演示运行非常缓慢。 我浏览并启用了 chrome://gpu 上所有红色的功能。 我现在在 Chrome 启动时遇到了一个新的错误,并且不会重复:

      [13837:13837:0505/004321.484642:ERROR:sandbox_linux.cc(374)] InitializeSandbox() called with multiple threads in process gpu-process.
      

      偶尔:

      [13801:13801:0505/005551.603893:ERROR:CONSOLE(15)] "Uncaught TypeError: Do not know how to serialize a BigInt", source: chrome://gpu/vulkan_info.js (15)
      

      不过,基准测试现在运行良好。希望这对我以外的人有用。我在带有 AMD GPU 驱动程序的 Linux 上,从“检测到的问题”部分判断,我怀疑这是我案例的一个促成因素。好吧,祝你好运!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-17
        • 2021-01-12
        • 1970-01-01
        • 1970-01-01
        • 2017-02-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多