J'ai récemment eu l'idée d'utiliser Selenium avec Python pour automatiser certaines tâches répétitives dans SAP pour un client. Et comme toujours quand on se salisse les mains avec le code, J'ai commencé à trouver des défis que je n'avais jamais vu venir. Après avoir longuement navigué sur Internet à essayer de trouver la solution la plus adaptée à chaque problème, pensé:
À quel point cela aurait-il été bien si vous aviez trouvé tout ce dont vous aviez besoin réuni en un seul endroit, prêt à l'emploi?
Ensuite, pour leur faciliter la vie, J'ai rassemblé dans cet article, les réponses aux défis les plus fréquents un utilisateur peut trouver en utilisant Selenium en conjonction avec Extraits de code prêts à l'emploi écrits en Python.
PD: Si vous ne vous sentez toujours pas à l'aise avec les bases de Selenium, Vous pouvez consulter notre Guide de démarrage de Selenium. Article premier.
Et maintenant passons à l'action!
Comment télécharger des fichiers à l'aide de Selenium WebDriver
Lors de l'utilisation de Selenium pour automatiser la navigation, vous devrez peut-être télécharger des fichiers. Le problème est que, dès que nous sélectionnons et cliquons sur le lien de téléchargement, une fenêtre de dialogue native apparaît nécessitant une intervention manuelle. Selenium n'a aucun contrôle sur les fenêtres de téléchargement de fichiers de votre navigateur, ne peut pas continuer le processus de téléchargement. Heureusement, il y a toujours des alternatives.
Pour résoudre ce problème, vous pouvez autoriser votre navigateur à télécharger des fichiers automatiquement au préalable et définir un emplacement de fichier de téléchargement par défaut. Cela peut être fait en définissant les préférences pour le profil WebDriver (le code ci-dessous est pour un navigateur Firefox, vous devrez peut-être l'adapter pour qu'il fonctionne dans d'autres navigateurs):
importer download_dir = os.getcwd()# répertoire de travail courant profile = webdriver.FirefoxProfile() profile.set_preference("browser.download.folderList", 2) # l'emplacement personnalisé spécifié browser.download.dir est activé lorsque browser.download.folderList est égal à 2 profile.set_preference('navigateur.téléchargement.dir', download_dir) profile.set_preference("browser.download.manager.showWhenStarting", Faux) profile.set_preference("navigateur.téléchargement.dir", chemin) profile.set_preference('browser.helperApps.neverAsk.saveToDisk', CONTENT_TYPE) profile.set_preference("webdriver_enable_native_events", Faux) profile.set_preference("browser.download.manager.scanWhenDone",Faux) profile.set_preference("browser.download.manager.useWindow",Faux) profile.set_preference("browser.helperApps.alwaysAsk.force",Faux) profile.update_preferences() navigateur = pilote web.Firefox(firefox_profile=profil)
Vous avez peut-être remarqué le CONTENT_TYPE
variable que vous devez remplacer. En réalité, correspond au type MIME du fichier que vous téléchargez. Si vous ne connaissez pas ce terme, Type de mime c'est simplement un identifiant qui est utilisé pour reconnaître un type de données pour un contenu sur Internet. Il sert le même objectif sur Internet que les extensions de fichier dans votre système d'exploitation.
Pour simplifier votre tâche, J'ai supprimé les types MIME des extensions les plus courantes des documents Web Mozilla, pour faciliter l'accès. Dans le widget ci-dessous, vous trouverez le code que vous devez utiliser pour obtenir le type de contenu correspondant à votre extension de fichier. Vous pouvez utiliser la console pour le tester immédiatement !!
Vous pouvez obtenir le fichier JSON en copiant et collant à partir du widget ci-dessus ou en le téléchargeant à partir de Github.
À présent, votre WebDriver devrait pouvoir télécharger sans demander la permission ni afficher les fenêtres de dialogue 😉