Utilizo Selenium Marrionette y GeckoDriver para extraer datos web. Utilizo lo siguiente para configurar mis preferencias de perfil de Firefox:

fp = webdriver.FirefoxProfile()
fp.set_preference("browser.download.folderList", 1)
fp.set_preference("browser.helperApps.alwaysAsk.force", False)
fp.set_preference("browser.download.manager.showWhenStarting",False)
fp.set_preference("browser.download.dir", "H:\Downloads")
fp.set_preference("browser.download.downloadDir","H:\Downloads")
fp.set_preference("browser.download.defaultFolder","H:\Downloads")

binary = FirefoxBinary(r'C:\Program Files (x86)\Mozilla Firefox\Firefox.exe')

firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True

driver = webdriver.Firefox(capabilities=firefox_capabilities, firefox_binary=binary, firefox_profile = fp)

Por lo que entiendo después de leer No se pueden establecer las preferencias de perfil de Firefox y FirefoxProfile pasó a FirefoxDriver, parece que no se está haciendo nada al usar firefox_profile ahora. Por lo tanto, necesito implementar las nuevas actualizaciones de firefox_capabilities, pero no estoy seguro de cómo hacerlo exactamente. ¿Algunas ideas?

8
d84_n1nj4 14 ene. 2017 a las 01:23

4 respuestas

La mejor respuesta

Ok, creo que finalmente me di cuenta de esto. En lugar de usar el código anterior, utilicé el siguiente código que apunto a mi carpeta de perfil de Firefox (si necesita actualizar la configuración predeterminada de su perfil, hágalo en Firefox antes de ejecutar este código):

from selenium.webdriver.firefox.options import Options
binary = FirefoxBinary(r'C:\Program Files (x86)\Mozilla Firefox\Firefox.exe')
fp = (r'C:\Users\username\AppData\Roaming\Mozilla\Firefox\Profiles\oqmqnsih.default')
opts = Options()
opts.profile = fp
firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
driver = webdriver.Firefox(capabilities=firefox_capabilities,firefox_binary=binary, firefox_options = opts)

Ejecuté este código junto con mi código de raspado web y una vez que hice clic en el enlace "Exportar CSV", se descargó automáticamente en lugar de la ventana emergente del Administrador de descargas. Siéntase libre de agregar cualquier comentario.

8
d84_n1nj4 16 ene. 2017 a las 19:05

El código inicial es parcialmente correcto. Debe establecer el valor browser.download.folderList como 2:

fp = webdriver.FirefoxProfile()
fp.set_preference("browser.download.folderList", 2) # 0 means to download to the desktop, 1 means to download to the default "Downloads" directory, 2 means to use the directory 
fp.set_preference("browser.helperApps.alwaysAsk.force", False) fp.set_preference("browser.download.manager.showWhenStarting",False) fp.set_preference("browser.download.dir", "H:\Downloads") 

binary = FirefoxBinary(r'C:\Program Files (x86)\Mozilla Firefox\Firefox.exe')

firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True

driver = webdriver.Firefox(capabilities=firefox_capabilities,firefox_binary=binary, firefox_profile = fp)
2
Rahul Devanavar 1 mar. 2018 a las 11:37

La solución para mi script de Python (en raspi 3):

binary = FirefoxBinary('/usr/bin/firefox')
driver = webdriver.Firefox(capabilities={'browserName': 'firefox' }, firefox_binary=binary)
1
Bryan Oakley 5 mar. 2019 a las 23:34

En lugar de la respuesta anterior, puede hacer clic con el botón derecho y elegir guardar como y guardarlo en el directorio deseado y después de ese punto, ese directorio será su directorio predeterminado para esa sesión y puede cambiarlo con el mismo método. Pero esta tampoco es una solución si desea que ese camino sea dinámico y cambiarlo programáticamente en la misma sesión. entonces la respuesta para ese problema es aquí.if sin embargo, puede usar el controlador de Chrome, siga las instrucciones en esta respuesta

1
EmreAkkoc 27 ago. 2017 a las 14:53