簡體   English   中英

未知錯誤:無法等待擴展背景頁面加載:chrome-extension error loading an extension to Chrome Headless using Selenium

[英]unknown error: failed to wait for extension background page to load: chrome-extension error loading an extension to Chrome Headless using Selenium

我嘗試在無頭模式下通過 selenium 運行 chromedriver。

重要如果我消除以下代碼行(但不是無頭的),代碼運行得很好:

chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')

這是我在嘗試實現 headless 參數時遇到的錯誤:

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

這是第 81、82 和 83 行

chrome_options.add_extension(extension_path)
driver = webdriver.Chrome(options=chrome_options,
                          executable_path=executable_path)

這是代碼(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)

底線是,不支持擴展。

在他的評論之一中, alexclarke@chromium.org提到:

我意識到很多人都想使用無頭擴展,但不幸的是,這是一個我們/沒有計划做/的大型項目。 問題是 Headless Chromium 是一個內容嵌入器,這意味着它無法訪問來自其他內容嵌入器(如 chrome)的任何內容,不幸的是,擴展是 chrome 的一項功能。

在另一條評論中,他進一步補充說,如果您通過DevTools使用Selenium ,您可以構建代理。 接下來,您可以通過Network.setRequestInterceptionNetwork.continueInterceptedRequest過濾 URL 並修改標頭。


參考

您可以在以下位置找到相關的詳細討論:

現在可以通過修改以下標志來實現:

chrome_options.add_argument('--headless=chrome')

我測試成功了。

我在這里找到它:https://bugs.chromium.org/p/chromium/issues/detail?id=706008#c5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM