Donc, voici le code avec lequel je rencontre des problèmes:
WebDriverException: unknown error: unable to discover open pages
Et l'erreur:
def scrap(): options = webdriver.ChromeOptions(); options.add_argument('headless'); options.add_argument('--profile-directory=Profile 1') options.add_argument("--user-data-dir=C:/Users/omarl/AppData/Local/Google/Chrome/User Data/") options.add_argument("--remote-debugging-port=45447") options.add_argument("--disable-gpu") browser = webdriver.Chrome(executable_path=r"C:\Users\omarl\OneDrive\Escritorio\chromedriver.exe", options=options) scrapURL = "https://es.wallapop.com/search?distance=30000&keywords=leggins&latitude=41.38804&longitude=2.17001&filters_source=quick_filters" browser.get(scrapURL) #...
Je n'ai aucune instance de chrome lorsque j'exécute le script, et lorsque je l'utilise sans l'option headless
, cela fonctionne bien. Une idée de pourquoi cela se produit? Veuillez noter que j'utilise le --remote-debuggin-port
fourni dans des questions similaires.
J'utilise ChromeDriver 86.0.4240.22
3 Réponses :
Cela peut être dû à une version obsolète de ChromeDriver. Essayez d'en télécharger un plus récent et réessayez d'exécuter le script.
Je ne pense pas que ChromeDriver 86.0.4240.22
soit si ancien
Eh bien, ce n'est pas vraiment le cas, mais ça vaut le coup
Avez-vous essayé d'utiliser arg --no-sandbox? Beaucoup de gens sur Chrome Driver Error utilisant Selenium: Impossible de découvrir les pages ouvertes ont eu du succès avec cet argument.
C'était une bonne idée, mais quelque chose d'autre après "browser.get" est probablement à l'origine de son problème. J'ai voté pour votre réponse, car c'était une tentative solide pour l'aider à résoudre son problème.
Pour appeler un profil Chrome en mode Headless , vous pouvez utiliser l'argument --user-data-dir
uniquement et vous pouvez supprimer en toute sécurité l'argument --profile-directory
comme suit:
Bloc de code:
DevTools listening on ws://127.0.0.1:9222/devtools/browser/93c67c41-e125-4d12-abc0-fcf0f07a62f4 Chrome Headless launched
Sortie de la console:
from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument('--headless') options.add_argument('--window-size=1920,1080') # options.add_argument('--profile-directory=Profile 1') options.add_argument(r"--user-data-dir=C:\Users\Soma Bhattacharjee\AppData\Local\Google\Chrome\User Data\Default") options.add_argument("--remote-debugging-port=9222") driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe') driver.get('https://www.google.com/') print("Chrome Headless launched")
Vous pouvez trouver quelques discussions détaillées pertinentes dans:
Veiller à ce que:
@Test
tant @Test
non root .driver.quit()
toujours driver.quit()
dans la méthode tearDown(){}
pour fermer et détruire correctement les instances WebDriver et Web Client .Conditions de course de réservation de port de débogage à distance ChromeDriver
Ici, vous dites que you can use...
Donc, le problème avec mon code est que j'utilisais les --profile-directory
et --user-data-dir
? Les réponses doivent être explicites sur la nature de l'erreur.
avec la version sans tête, vous utilisez également le même chemin exécutable?
Peut-être un problème avec votre chemin. Essayez
options.add_argument(r'--user-data-dir="C:\Users\omarl\AppData\Local\Chromium\User Data\Default"')
.@Norhther, il est difficile de vous donner une réponse explicite, car la section de code qui vous cause potentiellement l'erreur est omise de votre question. Veuillez fournir des détails supplémentaires.