J'utilise python-selenium et Chrome 59 et j'essaie d'automatiser une séquence de téléchargement simple. Lorsque je lance le navigateur normalement, le téléchargement fonctionne, mais lorsque je le fais en mode sans tête, le téléchargement ne fonctionne pas.
# Headless implementation
from selenium import webdriver
chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_argument("headless")
driver = webdriver.Chrome(chrome_options=chromeOptions)
driver.get('https://www.mockaroo.com/')
driver.find_element_by_id('download').click()
# ^^^ Download doesn't start
# Normal Mode
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.mockaroo.com/')
driver.find_element_by_id('download').click()
# ^^^ Download works normally
J'ai même essayé d'ajouter un chemin par défaut :
prefs = {"download.default_directory" : "/Users/Chetan/Desktop/"}
chromeOptions.add_argument("headless")
chromeOptions.add_experimental_option("prefs",prefs)
L'ajout d'un chemin par défaut fonctionne dans l'implémentation normale, mais le même problème persiste dans la version sans tête.
Comment faire pour que le téléchargement démarre en mode sans tête ?
0 votes
J'ai également essayé d'utiliser
submit
et l'envoiKeys.ENTER
. Cela fonctionne pour le navigateur normal, mais pas pour le navigateur sans tête.0 votes
Voulez-vous que cela soit fait en utilisant uniquement chrome ? ou firefox aussi ?
0 votes
Préférez chrome ou phantomjs
0 votes
Pourquoi ne pas simplement utiliser urllib pour télécharger le fichier ? cliquer sur le fichier pour simuler le téléchargement ne compte que pour certains des cas d'utilisateurs. J'ai utilisé des navigateurs qui ouvrent une fenêtre "Enregistrer sous" avant de commencer le téléchargement. Si vous cliquez pour voir s'il existe sur le serveur, ou pour vérifier le contenu du fichier, urllib sera probablement votre meilleure option.
2 votes
@TehTris le problème est que je fais cela sur un autre site qui nécessite que je me sois connecté auparavant. Cela définit à la fois les en-têtes et les cookies, donc je dois définir les deux avant de l'utiliser. Mais en utilisant seulement js, il semble qu'il n'y ait aucun moyen d'obtenir les en-têtes de requête du côté client... Donc je ne peux pas utiliser urlllib
0 votes
Est-ce que discussion vous aide ?