Запуск 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, я знаю, что это звучит непросто, но это работает для меня уже несколько месяцев, поэтому я надеюсь, что это поможет.