Запуск Selenium WebDriver с использованием Python с расширениями (.crx файлы)

Я пошел в Chrome Extension Downloader, чтобы заблокировать файл .crx для 'Adblock-Plus_v1.4.1'.

Я бросил его в каталог, в котором я работал, и затем побежал:

from selenium import webdriver

chop = webdriver.ChromeOptions()
chop.add_extension('Adblock-Plus_v1.4.1.crx')
driver = webdriver.Chrome(chrome_options = chop)

Он полностью признает, что он существует, но он дает мне то, что похоже на сообщение стиля ChromeDriver.exe:

ERROR:extension_error_reporter.cc(56)] Extension error: Package is invalid: 'CRX_PUBLIC_KEY_INVALID'.

Затем, в конце концов, исключение webdriver:

selenium.common.exceptions.WebDriverException: Message: u'Extension could not be installed'

Я почти на 100% уверен, что в моем коде нет ничего плохого из-за того, что он сначала отправил сообщение типа ChromeDriver, прежде чем выбросить исключение.

Я также попытался собрать его сам, перейдя в 'C:\Documents and Settings\\*UserName*\Local Settings\Application Data\Google\Chrome\User Data\Default\Extensions' on chrome://extensions/ с включенным режимом разработчика, попытался использовать этот .crx, который был создан, и получил то же сообщение об ошибке

Я также пробовал по-другому:

chop = webdriver.ChromeOptions()
chop.add_argument('--load_extension=Adblock-Plus_v1.4.1.crx')
driver = webdriver.Chrome(chrome_options = chop)

это не вызывает исключения или даже ошибки драйвера Chrome, но если я вручную перейду к chrome://extensions/, он не скажет, что расширение загружено...

Я думаю, что моя проблема связана с самим файлом .crx. из-за характера сообщения об ошибке... но тогда в то же время я не уверен, потому что если я создаю сеанс webdriver.Chrome(), а затем вручную перейду к chrome://extensions/, я могу физически перетащить и установить установку того же .crx файл.

Изменить: я понял, что я действительно не задал вопрос, так вот:

Что я делаю неправильно? Почему я не могу загрузить это расширение хром? Это мой код или сам файл .crx?

ОБНОВЛЕНИЕ: @Pat Meeker Ive пробовал это, но я теряю что-то в переводе с java на python

capability = webdriver.DesiredCapabilities.CHROME возвращает словарь, содержащий все мои аргументы в i, поэтому я уверен, что единственная часть, которую мне нужно сделать, это добавить аргументы.

options = webdriver.ChromeOptions()
options.add_argument('--user-data-dir=C:/Users/USER_NAME/AppData/Local/Google/Chrome/User Data/Default/')

Это то, что у меня есть прямо сейчас, и всякий раз, когда я пытаюсь driver = webdriver.Chrome(chrome_options=options) хром открывается, и он, кажется, помнит предыдущую позицию, но НИЧЕГО больше, никаких закладок, никаких расширений нет ничего.

Ответы

Ответ 1

Просто добавьте эту дополнительную строку в свою программу

from selenium.webdriver.chrome.options import Options он будет работать...

как это

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chop = webdriver.ChromeOptions()
chop.add_extension('Adblock-Plus_v1.4.1.crx')
driver = webdriver.Chrome(chrome_options = chop)

Ответ 2

Из моего скудного опыта проблема связана с аргументом load-extesion, а не с вашим кодом, поскольку у меня была такая же проблема с тестированием расширения, которое не из Chrome Web Store. Мне удалось решить эту проблему, установив расширение Drag and Drop и используя только аргумент --user-data-dir.

Это работало для меня с С# и Chrome 33, я знаю, что это звучит непросто, но это работает для меня уже несколько месяцев, поэтому я надеюсь, что это поможет.