Chrome 是否可以在无头模式下运行谷歌浏览器与扩展?

zpgglvta  于 2022-12-06  发布在  Go
关注(0)|答案(7)|浏览(456)

我无法在Google Chrome浏览器中使用当前安装的扩展。有什么方法可以启用它们吗?
检查扩展是否有效的一个简单方法是添加扩展,例如"Comic Sans Everything"。
Google看起来是这样的:

但是,如果我使用headless模式(google-chrome --headless --disable-gpu --screenshot https://www.google.com)对页面进行截图,则结果为:

zqdjd7g9

zqdjd7g91#

您可以使用Xvfb无外设运行Chrome扩展。
1.在Fedora sudo dnf install xorg-x11-server-Xvfb上安装Xvfb。

  1. xvfb-run google-chrome --remote-debugging-port=9222 --disable-gpu https://www.google.com
    1.使用chrome-remote-interface(或其他Chrome调试协议客户端)触发屏幕截图。
    更复杂,但它确实有效。这是我们用于Headless Chromium 扩展测试。
sgtfey8w

sgtfey8w2#

**编辑:**此答案不再正确,请参阅https://stackoverflow.com/a/73079789/934239

不,这是不可能的,由于任务的复杂性,Chrome开发人员决定在不久的将来不实施它。
如果你看这个问题,你可能会得到的想法,他们仍然在考虑它由于 chrome 驱动程序的要求-但相反,他们决定使 chrome 驱动程序的工作没有扩展(通过DevTools)。

dfty9e19

dfty9e193#

你可以使用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服务器上运行

vhmi4jdf

vhmi4jdf4#

实际上现在可以用了,他们修好了。你可以用

options.add_argument("--headless=chrome")

工作起来很有魅力。https://bugs.chromium.org/p/chromium/issues/detail?id=706008#c36

wb1gzix0

wb1gzix05#

headless模式下的google-chrome尚不支持扩展。

skyos...@chromium.org在他的评论中明确提到:
我们决定暂时不以headless模式实现扩展支持,因为支持所有必需的特性相当复杂
您可以在为无头镶边添加扩展支持中找到完整的分析
eseckler@chromium.org在他的评论中提到了真实的问题:
1.许多扩展API是特定于非headless浏览器的,因此在headless chrome中不受支持。
1.在我们可以支持的API中,只有部分实现的方式使我们可以在headless chrome中重用它们。
1.改变这一点需要大量的重构,考虑到我们将获得的好处,这似乎是不合理的。
他又补充道:
无论哪种方式,由于(1)的原因,扩展都可能需要被修改以与headless chrome一起工作。所以即使我们解决了(2),大多数现有的扩展也将不兼容。(这也使得headless chrome不适合测试chrome扩展。)
扩展可以提供给headless chrome的大多数功能都可以通过headless向其用户公开的DevTools API实现。如果您有一个不受DevTools API支持的用例,请提交功能请求。
而且,在他的评论中,alexclarke@chromium.org明确提到:
我意识到很多人都想使用headless的扩展,但不幸的是,这是一个大项目,我们没有/没有计划做/。问题是Headless Chromium是一个内容嵌入器,这意味着它不能访问其他内容嵌入器(如chrome)的任何内容,不幸的是,扩展是chrome的一个功能。
在另一条评论中,他进一步补充说,如果你通过DevTools使用Selenium,你可以构建一个代理。你可以通过Network.setRequestInterception和Network. continueInterceptedRequest过滤URL和修改头。

voase2hg

voase2hg6#

add_argument(“--headless=chrome”)可以正常工作

yv5phkfx

yv5phkfx7#

我还没试过但是看看这个
https://github.com/php-webdriver/php-webdriver/blob/2ed6645812603b20a7a249d4a66e286eb407300c/lib/Chrome/ChromeOptions.php#L83
phpdoc读取

/**
     * Add a Chrome extension to install on browser startup. Each path should be
     * a packed Chrome extension.
     *
     * @param array $paths
     * @return ChromeOptions
     */
    public function addExtensions(array $paths)

相关问题