Запуск 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' на chrome://extensions/ с режимом разработчика on, попытался использовать этот .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() сеанс webdriver.Chrome() , а затем вручную webdriver.Chrome() к chrome://extensions/ i физически перетаскиваю установите тот же .crx-файл.

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

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

UPDATE: @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) хром открывается, и, похоже, он помнит свою предыдущую позицию, но НИЧЕГО больше, никаких закладок, никаких расширений нет ничего.

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

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) 

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

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