Google chrome 有可能在无头模式下运行Google Chrome和扩展吗?

Google chrome 有可能在无头模式下运行Google Chrome和扩展吗?,google-chrome,google-chrome-extension,google-chrome-headless,headless,Google Chrome,Google Chrome Extension,Google Chrome Headless,Headless,我无法在Google Chrome中使用无头模式使用当前安装的扩展。有什么方法可以使它们成为可能吗 检查扩展是否有效的一种简单方法是添加扩展,例如“” 所以谷歌看起来是这样的: 但是,如果我使用headless模式(googlechrome--headless--disable-gpu--screenshot)截取页面的屏幕截图https://www.google.com),结果是: 不,这是不可能的,而Chrome开发者由于任务的复杂性 如果你看到这个问题,你可能会觉得他们仍然在考虑Chro

我无法在Google Chrome中使用无头模式使用当前安装的扩展。有什么方法可以使它们成为可能吗

检查扩展是否有效的一种简单方法是添加扩展,例如“”

所以谷歌看起来是这样的:

但是,如果我使用headless模式(
googlechrome--headless--disable-gpu--screenshot)截取页面的屏幕截图https://www.google.com
),结果是:


不,这是不可能的,而Chrome开发者由于任务的复杂性


如果你看到这个问题,你可能会觉得他们仍然在考虑ChromeDriver的要求,但是他们决定让ChromeDriver在没有扩展的情况下工作(通过DevTools)。

你可以使用无头扩展运行Chrome

  • 安装Xvfb。在Fedora上安装xorg-x11-server-Xvfb
  • xvfb运行google chrome——远程调试端口=9222——禁用gpuhttps://www.google.com
  • 使用(或其他Chrome调试协议客户端)触发屏幕截图

  • 更复杂,但它确实有效。这是我们用于无头chrome扩展测试的工具。

    您可以使用
    pyvirtualdisplay
    在服务器上以零显示运行chrome。最好的情况是,您可以使用此技巧运行扩展

    以下是我的实现:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    import time
    from pyvirtualdisplay import Display
    
    display = Display(visible=0, size=(800, 600))
    display.start()
    
    chrome_options = Options()
    
    chrome_options.add_extension("proxy.zip")
    
    driver = webdriver.Chrome(executable_path='/usr/bin/chromedriver', chrome_options=chrome_options)
    time.sleep(3)
    driver.get("https://ipinfo.io/json")
    print(driver.page_source)
    driver.close()
    
    display.stop()
    
    您需要在服务器/计算机上安装
    xvfb

    sudo apt install -y xvfb
    pip install pyvirtualdisplay
    
    在我的AWS服务器上运行它


    使用chrome how to headless的其他可能性是-headless chrome Node.js API

    否,in模式还不支持扩展

    skyos…@chromium.org
    在他的文章中明确提到:

    我们决定暂时不在headless模式下实现扩展支持,因为支持所有必需的特性相当复杂

    您可以在中找到完整的分析

    eseckler@chromium.org
    在他的报告中提到了以下实时问题:

  • 很多扩展API都是针对非headless浏览器的,因此在headless chrome中不受支持
  • 在我们可以切实支持的API中,只有部分是以这样的方式实现的,即我们目前可以在headless chrome中重用它们
  • 改变这一点需要大量重构,但考虑到我们将获得的好处,这些重构似乎并不合理
  • 他还说,

    无论哪种方式,由于(1)的原因,可能必须对扩展进行调整,以适用于无头镀铬。因此,即使我们解决了(2),大多数现有的扩展也不兼容。(这也使得无头铬合金不适合测试铬合金延长件。)

    扩展提供给headless chrome的大部分功能(如果不是全部的话)都可以通过headless向用户公开的DevTools API实现。如果您有一个不受devtoolsapi支持的用例,请提交一个特性请求

    而且在他的alexclarke@chromium.org明确提到:

    我意识到很多人希望使用无头扩展,但不幸的是,这是一个大项目,我们没有/没有计划去做。问题是,Headless chrome是一个内容嵌入程序,这意味着它无法访问其他内容嵌入程序(如chrome)的任何内容,不幸的是,扩展是chrome的一个功能


    在另一篇文章中,他进一步补充道,如果你使用through,你可以构建一个代理。您可以通过和过滤URL和修改标题。

    目前不可能,请参阅相关:-尽管它无法无头工作。无头模式将来是否支持扩展?有没有其他的网络浏览器支持无头模式和扩展?是的,firefox支持。这是一个糟糕的缺失功能。只是澄清一下:此解决方案不使用Chrome内置的“无头”模式,而是在虚拟显示器上呈现Chrome。谢谢
    xvfb run
    也可以在不带远程调试选项的情况下使用Selenium,例如:
    xvfb run--server args=“-screen 0 1920x1080x24”python run Selenium.py
    。看,既然木偶演员只使用chrome,它并没有扩展它,它不能做比chrome更多的事情。