我尝试在无头模式下通过 selenium 运行chromedriver。
重要信息如果我删除以下代码行,代码运行得非常好(但不是无头的):
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
这是我在尝试实现无头论证时遇到的错误:
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)
3条答案
按热度按时间cmssoen21#
底线是,不,google-chrome-headless不支持扩展。
在他的一篇评论中,* alexclarke@chromium.org * 提到:
我意识到很多人都想使用headless的扩展,但不幸的是,这是一个大项目,我们没有/没有计划做/。问题是Headless Chromium是一个内容嵌入器,这意味着它不能访问其他内容嵌入器(如chrome)的任何内容,不幸的是,扩展是chrome的一个功能。
在另一条评论中,他进一步补充说,如果你通过DevTools使用Selenium,你可以建立一个代理。接下来你可以过滤URL并通过Network.setRequestInterception和Network. continueInterceptedRequest修改头。
参考
您可以在以下位置找到相关的详细讨论:
gmxoilav2#
Chrome不支持headless,但显然Firefox支持。一些相关讨论:
1.是否可以在无头模式下运行谷歌浏览器与扩展?
mrzz3bfm3#
这现在可以通过修改以下标志来实现:
添加参数('--headless= chrome')
我测试成功了。
我在这里找到的:https://bugs.chromium.org/p/chromium/issues/detail?id=706008#c5