【问题标题】:How can I fix an element becoming unclickable in a headless browser (Selenium Python)?如何修复在无头浏览器(Selenium Python)中变得不可点击的元素?
【发布时间】:2022-01-16 17:42:05
【问题描述】:

对于上下文,我正在研究一种方法,可以自动从我公司的预订引擎中获取特定信息。我正在使用 selenium 登录到预订引擎并导航到相关页面以获取我想要的信息。我希望能够在不打开实际可见的浏览器窗口的情况下执行此操作。

我一直在使用可见浏览器,目的是帮助我在运行时实际查看代码在做什么,从而更容易修复错误。但是,当我尝试使用无头浏览器运行它时,我突然遇到了一个元素不可交互异常。这是我的代码的相关部分。

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options

option = webdriver.ChromeOptions()
option.add_argument('headless')

driver = webdriver.Chrome(ChromeDriverManager().install(), options=option)

我的代码与之前的代码相同。我唯一改变的是在选项中添加了“无头”参数。任何人都知道为什么这会导致某些元素无法交互以及如何解决它?

【问题讨论】:

    标签: python selenium


    【解决方案1】:

    解决方案涉及使用https://github.com/ponty/PyVirtualDisplay 来模拟无头环境(如 Linux)中的有头显示器。 (这可以帮助您解决可能仅在使用无头浏览器加载网站时出现的问题。)虚拟显示使用Xvfb,实际上这里有一个非常流行的 Stack Overflow 解决方案:https://stackoverflow.com/a/6300672

    以下是针对您的情况的先前解决方案的摘要:

    安装:

    pip install pyvirtualdisplay
    

    下面是如何在你的 Python 代码中使用它:

    from pyvirtualdisplay import Display
    display = Display(visible=0, size=(800, 600))
    display.start()
    # display is active / Run your selenium code
    # ----------
    display.stop()
    # display is stopped
    

    将它们与您的代码放在一起后,它将如下所示:

    from selenium import webdriver
    from webdriver_manager.chrome import ChromeDriverManager
    from selenium.webdriver.chrome.options import Options
    from pyvirtualdisplay import Display
    
    display = Display(visible=0, size=(800, 600))
    display.start()
    # ...
    option = webdriver.ChromeOptions()
    driver = webdriver.Chrome(ChromeDriverManager().install(), options=option)
    # ...
    display.stop()
    

    (根据需要进行修改,例如屏幕分辨率等)

    有一些 Selenium Python 框架已经内置了虚拟显示(例如SeleniumBase,它通过添加的pytest 命令行参数激活虚拟显示:--xvfb。)每个框架都有内置功能可能会有所不同。

    如果您使用此解决方案,请确保不要在无头模式下运行 Chrome。虚拟显示器应该允许您在无头环境中运行常规的有头 Chrome。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多