2017-08-14 1 views
0

J'ai un projet dans lequel j'ai besoin de télécharger un fichier audio dans ChromeDriver. Le comportement ici est différent de celui de Chrome, où si je consulte l'URL, le téléchargement d'un fichier commencera automatiquement. Si je fais la même chose manuellement dans ChromeDriver, le fichier ne sera pas téléchargé.Téléchargement de fichiers avec ChromeDriver

J'ai essayé différentes configurations des options/préférences chromées. J'ai également trouvé des options qui fonctionnaient avec les anciennes versions de chrome, qui ne fonctionnent plus.

Voici une des meilleures ressources que j'ai trouvé, mais il ne fonctionne toujours pas, même avec leur billet de blog mis à jour https://dkage.wordpress.com/2012/03/10/mid-air-trick-make-selenium-download-files/

Lorsque je tente d'utiliser sa solution, mon chromedriver se bloque brusquement dans un non façon chrome-esque. Cela disparaît juste. Pas la page "Quelque chose a mal tourné" comme vous vous en doutez normalement. Je me retrouve avec Java ne pas être en mesure de trouver ma session, car il a cessé d'exister.

Quelqu'un at-il réussi à télécharger des fichiers via Selenium webdriver dans Chrome? Si je dois utiliser un autre navigateur, je peux. Je suis actuellement en train d'utiliser Chrome Canary.

+0

Vous cherchez donc à télécharger automatiquement des fichiers via Selenium webdriver dans Chrome? Pouvez-vous partager un exemple de site Web et votre recherche s'il vous plaît? – DebanjanB

+0

J'essaie de télécharger des fichiers audio et d'effectuer une reconnaissance vocale. La dernière moitié fonctionne. Le problème que j'ai est de télécharger le fichier lorsque la page est visitée. Je peux fournir un lien quand je rentre à la maison – Kristoff

+0

Ne serait-il pas préférable de simplement télécharger un fichier via des E/S normales à la place? –

Répondre

0

J'ai le même problème. Une solution qui pourrait fonctionner est d'utiliser une autre bibliothèque, capable de fonctionner en dehors du navigateur. J'ai trouvé ces discussiong post stackoverflow cette question:

https://sqa.stackexchange.com/questions/2197/how-to-download-a-file-using-seleniums-webdriver

contient ce Wich BlogPost vous donne quelques sugestions. https://blog.codecentric.de/en/2010/07/file-downloads-with-selenium-mission-impossible/

  1. automatisation Fenêtre

La première sent approche comme « force brute »: lors de la recherche sur le net pour une solution au problème, vous vous retrouvez facilement avec des suggestions, pour contrôler le natif fenêtre avec un logiciel d'automatisation de fenêtre comme AutoIt. Signifie que vous devez préparer AutoIt tel, qu'il attend une boîte de dialogue de téléchargement du navigateur, le point auquel Selenium abandonne, prend le contrôle de la fenêtre, enregistre le fichier et ferme la fenêtre. Après cela, le sélénium peut continuer comme d'habitude.

Cela pourrait éventuellement fonctionner, mais je l'ai trouvé être une surutilisation technique. Et comme il s'est avéré, il y avait une solution beaucoup plus simple au problème.

  1. Modifier les navigateurs comportement par défaut

La deuxième possibilité est de changer le comportement par défaut du navigateur. Lorsque vous cliquez sur un document PDF par exemple, le navigateur ne doit pas ouvrir une boîte de dialogue et demander à l'utilisateur ce qu'il doit faire avec le fichier, mais l'enregistrer sans commentaires ni questions dans un répertoire prédéfini. Pour ce faire, un téléchargement de fichier doit être lancé manuellement, enregistré sur le disque et marqué comme comportement par défaut pour ces types de fichiers à partir de maintenant.

Eh bien, cela pourrait fonctionner. Vous "seulement" devez vous assurer que tous les développeurs, instances hudson, etc. partagent le même profil de navigateur. Et selon la quantité de différents types de fichiers, cela pourrait être un travail manuel.

  1. Téléchargement direct

un pas en arrière, pourquoi nous voulons télécharger le fichier avec Sélénium en premier lieu? Ne serait-il pas plus cool de télécharger le fichier sans Selenium, mais plutôt avec wget? Vous auriez résolu le deuxième problème au fur et à mesure. Cela semble une bonne idée, puisque wget n'est pas seulement disponible pour Linux mais aussi pour Windows.

Problème résolu? Pas tout à fait: qu'en est-il des fichiers, qui ne sont pas librement accessibles? Quoi, quand je dois d'abord créer un état avec Selenium pour accéder à un fichier généré? La solution semble correcte pour les fichiers publics, mais ne s'applique pas à toutes les situations.

+0

Afin de le faire à travers le navigateur à la main, je dois inspecter l'élément, et saisir l'emplacement de l'URL du fichier audio à partir du code. J'ai l'option de lire l'audio dans le navigateur, et de l'enregistrer, mais cela semble être ma solution de surpuissance à l'esprit – Kristoff