未知错误:无法等待扩展程序背景页面加载:使用 Selenium 将扩展程序加载到 Chrome Headless 的 chrome-extension 错误

The*_*Dan 1 python selenium google-chrome-extension selenium-chromedriver google-chrome-headless

我尝试在无头模式下通过 selenium 运行 chromedriver。

重要如果我消除以下代码行(但不是无头的),代码运行得非常好:

chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
Run Code Online (Sandbox Code Playgroud)

这是我尝试实现无头参数时遇到的错误:

Traceback (most recent call last):
  File "camel.py", line 83, in <module>
    executable_path=executable_path)
  File "/home/.local/lib/python3.6/site-packages/selenium/webdriver/chrome/webdriver.py", line 81, in __init__
    desired_capabilities=desired_capabilities)
  File "/home/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "/home/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/home/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/home/.local/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: failed to wait for extension background page to load: chrome-extension://jkompbllimaoekaogchhkmkdogpkhojg/_generated_background_page.html
from unknown error: page could not be found: chrome-extension://jkompbllimaoekaogchhkmkdogpkhojg/_generated_background_page.html
Run Code Online (Sandbox Code Playgroud)

这是第 81、82 和 83 行

chrome_options.add_extension(extension_path)
driver = webdriver.Chrome(options=chrome_options,
                          executable_path=executable_path)
Run Code Online (Sandbox Code Playgroud)

这是代码(crhomedriver 执行部分):

from selenium import webdriver
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.expected_conditions import presence_of_element_located

import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))

chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
log_path = os.path.join(BASE_DIR, 'cronJobChromeDriver.log')

executable_path = os.path.join(BASE_DIR, 'chromedriver_linux64/chromedriver')
extension_path = os.path.join(
    BASE_DIR, 'chromedriver_linux64/extension_2_8_9_0.crx')
print('executable_path', executable_path)
Run Code Online (Sandbox Code Playgroud)

Deb*_*anB 5

底线是,不支持扩展。

在他的评论之一中,alexclarke@chromium.org提到:

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

在另一条评论中,他进一步补充说,如果您通过DevTools使用Selenium,您可以构建一个代理。接下来,您可以通过Network.setRequestInterceptionNetwork.continueInterceptedRequest过滤 URL 并修改标头。


参考

您可以在以下位置找到相关的详细讨论:


归档时间:

查看次数:

4402 次

最近记录:

5 年,2 月 前