J'utilise Selenium et python pour gratter le Web depuis quelques semaines maintenant. Cela fonctionne assez bien. Fonctionnant sous macOS et Windows 7. Cependant, tout d'un coup, le pilote Web sans tête a cessé de fonctionner. J'ai utilisé chromedriver avec les paramètres suivants:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('url')
Au départ, je devais ajouter les arguments window, gpu et sandbox pour le faire fonctionner et cela fonctionnait jusqu'à présent. Cependant, lors de l'exécution du script, il reste bloqué sur driver.get ('url'). Cela ne produit pas d'erreur ou quoi que ce soit semble simplement fonctionner indéfiniment. Quand je cours sans headless et que je lance simplement:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--headless")
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
chrome_options.add_argument("--window-size=1920x1080")
driver = webdriver.Chrome(chrome_options=options)
driver.get('url')
cela fonctionne exactement comme prévu. Ce problème est également isolé sur ma machine Windows. Par où commencer?
3 Réponses :
J'ai fait quelques tests supplémentaires et je me suis rendu compte que cela semble fonctionner. Cependant, il faut tellement de temps pour exécuter le driver.get ('url') qu'il semblait être un chargement infini. Pendant ce temps, cela fonctionne parfaitement sur mon macOS, donc le problème ne fonctionne que sans tête dans Windows. L'exemple ci-dessous prend> 10 secondes pour simplement ouvrir Google, puis quitter. Qu'est-ce qui pourrait causer cela?
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--headless")
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
chrome_options.add_argument("--window-size=1920x1080")
driver = webdriver.Chrome(options=options, executable_path=r'C:\Program Files (x86)\Python37-32\chromedriver.exe')
driver.get('http://google.com/')
print("Headless Chrome Initialized on Windows OS")
print('Hello world')
driver.quit()
Pour une raison quelconque, le paramètre proxy le ralentissait. Par conséquent, il a été résolu en ajoutant:
options.add_argument(f'--proxy-server={None}')
J'ai eu exactement le même problème. Il est apparu au hasard après que le script a fonctionné correctement pendant des semaines. OP m'a conduit dans la bonne direction, mais sa solution n'a pas fonctionné pour moi. J'ai dû ajouter:
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--start-maximized")
chrome_options.add_argument("--start-fullscreen")
chrome_options.add_argument("--no-proxy-server")
chrome_options.add_argument("--proxy-server='direct://'");
chrome_options.add_argument("--proxy-bypass-list=*");
chrome_options.binary_location = "C:\Program Files (x86)\Google\Chrome Dev\\Application\chrome.exe"
browser = webdriver.Chrome(options=chrome_options)
browser.set_window_size(2000, 1080)
Mon code complet:
chrome_options.add_argument("--no-proxy-server")
chrome_options.add_argument("--proxy-server='direct://'");
chrome_options.add_argument("--proxy-bypass-list=*");
voir aussi:
Pilote Chrome sans tête trop lent et: Chrome Webdriver produit un délai d'expiration dans le sélénium
Avez-vous modifié quelque chose dans Chrome (mises à jour, configuration, etc.) ou d'autres paramètres entre-temps? Parce que le dernier exemple montre que le headless est désactivé, mais pas non plus de sandbox et de GPU. Avez-vous essayé différentes combinaisons de ces paramètres?
La seule chose qui me vient à l'esprit est que j'ai supprimé plusieurs Go de dossiers que le pilote Chrome avait créés dans le dossier tmp sous Windows. Il y avait des milliers de dossiers "scoped_dir" qui avaient été créés et consommaient mon stockage. Cela pourrait-il être quelque chose? Sinon, j'ai essayé une combinaison des arguments sans aucune chance.