Ejecutando Selenium WebDriver usando Python con extensiones (archivos .crx)

Fui a Chrome Extension Downloader para enganchar el archivo .crx para ‘Adblock-Plus_v1.4.1’.

Lo tiré en el directorio en el que estoy trabajando y luego corrí:

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

Reconoce totalmente que existe, pero me da lo que parece un mensaje de estilo ChromeDriver.exe :

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

Entonces, finalmente, una excepción webdriver:

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

Estoy casi 100% seguro de que mi código no tiene nada de malo, ya que pone un mensaje de tipo ChromeDriver antes de lanzar la excepción.

También intenté empaquetarlo yendo a 'C:\Documents and Settings\\*UserName*\Local Settings\Application Data\Google\Chrome\User Data\Default\Extensions' en chrome://extensions/ with developer mode encendido, intenté usar ese .crx que se creó y recibió exactamente el mismo mensaje de error

También probé de otra manera:

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

esto no causa una excepción o incluso un error del controlador de Chrome, pero si voy manualmente a chrome://extensions/ no dice que la extensión está cargada …

Estoy pensando que mi problema tiene que ver con el propio archivo .crx. debido a la naturaleza del mensaje de error … pero al mismo tiempo, no estoy seguro porque si webdriver.Chrome() una sesión webdriver.Chrome() , y luego manualmente voy a chrome://extensions/ puedo arrastrar físicamente y soltar instalar el mismo archivo .crx.

Edición: Me di cuenta de que en realidad no hice una pregunta, así que aquí está:

¿Qué estoy haciendo mal? ¿Por qué no puedo cargar esta extensión de Chrome? ¿Es mi código, o el propio archivo .crx?

ACTUALIZACIÓN: @Pat Meeker He intentado esto, pero estoy perdiendo algo en la traducción de java a python

capability = webdriver.DesiredCapabilities.CHROME devuelve un diccionario que tiene todos mis argumentos en i , así que estoy bastante seguro de que la única parte que debo hacer es agregar los argumentos.

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

Esto es lo que tengo ahora, y cada vez que trato de driver = webdriver.Chrome(chrome_options=options) chrome se abre, y parece recordar su posición anterior, pero NADA más, sin marcadores, sin extensiones, sin nada.

Solo agrega esta línea extra en tu progtwig

from selenium.webdriver.chrome.options import Options funcionará …

Me gusta esto

 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) 

Desde mi escasa experiencia, el problema radica en el argumento de load-extesion y no en su código, ya que tuve el mismo problema al probar una extensión que no es de Chrome Web Store. --user-data-dir resolverlo instalando la extensión con Drag & Drop y usando solo el --user-data-dir .

Esto me funcionó con C # y Chrome 33, sé que suena débil pero me funciona por varios meses, así que espero que sirva de ayuda.