我无法使用无头模式在Google Chrome中使用我当前安装的扩展程序。有没有办法启用它们?
检查扩展程序是否有效的简便方法是添加“Comic Sans Everything”扩展程序。
Google就是这样的:
但是,如果我使用无头模式(google-chrome --headless --disable-gpu --screenshot https://www.google.com
)截取页面截图,结果是:
答案 0 :(得分:23)
不,这是不可能的,Chrome开发人员decided against implementing it in any near future由于任务的复杂性。
如果你看一下这个问题,你可能会认为他们仍然在考虑ChromeDriver的要求 - 但是他们决定让ChromeDriver无需扩展(通过DevTools)。
答案 1 :(得分:17)
您可以使用Xvfb无线投放Chrome浏览器。
sudo dnf install xorg-x11-server-Xvfb
xvfb-run google-chrome --remote-debugging-port=9222 --disable-gpu https://www.google.com
更复杂,但确实有效。这就是我们用于无头镀铬扩展测试的方法。
答案 2 :(得分:7)
您可以使用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服务器上运行
答案 3 :(得分:1)
否,google-chrome模式下的headless目前不支持扩展程序。
skyos...@chromium.org
在他的comment中明确提到:
我们现在决定不以无头模式实现扩展支持,因为支持所有必需的功能相当复杂
您可以在Add extension support for headless chrome
中找到完整的分析 eseckler@chromium.org
在他的comment中提到了以下实时问题:
他进一步补充,
无论哪种方式,由于(1),扩展都可能必须适应于无头镀铬。因此,即使我们解决了(2),大多数现有扩展也不兼容。 (这也使无头chrome不适合测试chrome扩展。)
扩展(即使不是全部)可以提供给无头chrome的所有功能,也可以通过将无头公开给用户的DevTools API来实现。如果您有DevTools API不支持的用例,请提出功能请求。
此外,在他的comment中,alexclarke@chromium.org
明确提到:
我知道很多人都想无头使用扩展,但是不幸的是,这是一个大项目,我们尚无计划/。问题在于Headless Chromium是一个内容嵌入程序,这意味着它无法访问其他内容嵌入程序(例如chrome)中的任何内容,不幸的是扩展是chrome功能。
他进一步在另一个comment中补充说,如果您通过Selenium使用DevTools,则可以构建代理。您可以通过Network.setRequestInterception 和Network.continueInterceptedRequest过滤URL并修改标题。
答案 4 :(得分:0)
我还没试过,但看看这个
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)
答案 5 :(得分:-1)
使用puppeteer来实现无头的其他使用Chrome的可能性-无头Chrome Node.js API