web-dev-qa-db-fra.com

Python Définissez les préférences de Firefox pour Selenium - Emplacement du téléchargement

J'utilise Selenium Marrionette et GeckoDriver pour extraire des données Web. J'utilise les éléments suivants pour définir mes préférences de profil 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)

D'après ce que j'ai compris après avoir lu Impossible de définir les préférences de profil firefox et FirefoxProfile transmis à FirefoxDriver , il semble que rien ne soit fait lors de l'utilisation de firefox_profile maintenant. Je dois donc implémenter les nouvelles mises à jour à firefox_capabilities, mais je ne sais pas comment faire exactement cela. Des idées?

7
d84_n1nj4

Ok, je crois que j'ai finalement compris ce gâchis. Au lieu d'utiliser le code ci-dessus, j'ai utilisé le code suivant que je pointe vers mon dossier de profil Firefox (si vous devez mettre à jour vos paramètres de profil par défaut, faites-le dans Firefox avant d'exécuter ce code):

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)

J'ai exécuté ce code avec mon code Web et, une fois que j'ai cliqué sur le lien "Exporter au format CSV", il s'est automatiquement téléchargé, contrairement à la fenêtre du Gestionnaire de téléchargement qui s'ouvre. N'hésitez pas à ajouter des commentaires.

7
d84_n1nj4

Le code initial est partiellement correct. Vous devez définir la valeur de browser.download.folderList sur 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)
1
Rony Rozas

la solution pour mon script python (sur raspi 3):

binary = FirefoxBinary ('/ usr/bin/firefox') driver = webdriver.Firefox (capacités = {'browserName': 'firefox'}, firefox_binary = binary)

1
basilio

Au lieu de la réponse précédente, vous pouvez cliquer avec le bouton droit de la souris sur et choisir enregistrer sous et l'enregistrer dans le répertoire souhaité. cette session et vous pouvez le changer avec la même méthode. Mais celui-ci n’est pas non plus une solution si vous voulez que ce chemin soit dynamique et le change par programme au cours de la même session. la réponse à ce problème est donc ici . Si vous pouvez utiliser le pilote Chrome, suivez toutefois les instructions données dans cette réponse

1
BlanketSniffer