4
votes

Selenium Chrome Webdriver ne fonctionne pas en mode sans tête avec profil

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 commentaires

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\AppDa‌​ta\Local\Chromium\Us‌​er 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.


3 Réponses :


-1
votes

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.


2 commentaires

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



0
votes

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.


1 commentaires

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.



0
votes

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")
    

Références

Vous pouvez trouver quelques discussions détaillées pertinentes dans:


Considérations supplémentaires

Veiller à ce que:

  • Selenium est mis à niveau vers la version actuelle 3.141.0 .
  • ChromeDriver est mis à jour au niveau actuel de ChromeDriver v86.0 .
  • Chrome est mis à jour au niveau actuel de la version 86.0 de Chrome . (selon les notes de version de ChromeDriver v86.0 ).
  • Exécutez votre @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 .

tl; dr

Conditions de course de réservation de port de débogage à distance ChromeDriver


1 commentaires

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.