Exécution de liaisons python Selenium WebDriver dans Chrome

147

J'ai rencontré un problème en travaillant avec Selenium. Pour mon projet, je dois utiliser Chrome. Cependant, je ne peux pas me connecter à ce navigateur après l'avoir lancé avec Selenium.

Pour une raison quelconque, Selenium ne peut pas trouver Chrome par lui-même. Voici ce qui se passe lorsque j'essaye de lancer Chrome sans inclure de chemin:

Traceback (most recent call last):
  File "./obp_pb_get_csv.py", line 73, in <module>
    browser = webdriver.Chrome() # Get local session of chrome
  File "/usr/lib64/python2.7/site-packages/selenium/webdriver/chrome/webdriver.py", line 46, in __init__
    self.service.start()
  File "/usr/lib64/python2.7/site-packages/selenium/webdriver/chrome/service.py", line 58, in start
    and read up at http://code.google.com/p/selenium/wiki/ChromeDriver")
selenium.common.exceptions.WebDriverException: Message: 'ChromeDriver executable needs to be available in the path.                 Please download from http://code.google.com/p/selenium/downloads/list                and read up at http://code.google.com/p/selenium/wiki/ChromeDriver'

Pour résoudre ce problème, j'ai ensuite inclus le chemin Chromium dans le code qui lance Chrome. Cependant, l'interpréteur ne parvient pas à trouver une socket à laquelle se connecter:

Traceback (most recent call last):
  File "./obp_pb_get_csv.py", line 73, in <module>
    browser = webdriver.Chrome('/usr/bin/chromium') # Get local session of chrome
  File "/usr/lib64/python2.7/site-packages/selenium/webdriver/chrome/webdriver.py", line 46, in __init__
    self.service.start()
  File "/usr/lib64/python2.7/site-packages/selenium/webdriver/chrome/service.py", line 64, in start
    raise WebDriverException("Can not connect to the ChromeDriver")
selenium.common.exceptions.WebDriverException: Message: 'Can not connect to the ChromeDriver'

J'ai également essayé de résoudre le problème en lançant chrome avec:

chrome --remote-shell-port = 9222

Cependant, cela n'a pas fonctionné non plus.

PS. Voici quelques informations sur mon système:

www-client: chrome 15.0.874.121  
dev-lang: python 2.7.2-r3 Selenium 2.11.1  
Système d'exploitation: GNU / Linux Gentoo Kernel 3.1.0-gentoo-r1
Akendo
la source
Je voulais juste vous faire savoir que "--remote-shell-port" n'est pas une option de ligne de commande valide. Voir: peter.sh/experiments/chromium-command-line-switches ("--remote-debugging-port" serait le bon. Veuillez noter que vous devez fermer toutes les instances de chrome avant d'utiliser cette option. C'est-à-dire créer un nouvelle fenêtre dans une session de navigateur existante ne fonctionne pas).
dpat

Réponses:

133

Vous devez vous assurer que le binaire ChromeDriver autonome (qui est différent du binaire du navigateur Chrome) est soit dans votre chemin, soit disponible dans la variable d'environnement webdriver.chrome.driver.

voir http://code.google.com/p/selenium/wiki/ChromeDriver pour obtenir des informations complètes sur la façon de câbler les choses.

Éditer:

Bien, semble être un bogue dans les liaisons Python lors de la lecture du binaire chromedriver à partir du chemin ou de la variable d'environnement. Il semble que si chromedriver n'est pas dans votre chemin, vous devez le transmettre en tant qu'argument au constructeur.

import os
from selenium import webdriver

chromedriver = "/Users/adam/Downloads/chromedriver"
os.environ["webdriver.chrome.driver"] = chromedriver
driver = webdriver.Chrome(chromedriver)
driver.get("http://stackoverflow.com")
driver.quit()
Adam Goucher
la source
Désolé, oubliez de le mentionner. J'ai ce lien.
Akendo
2
J'ai essayé le Chromedriver au lieu de Firefox Webdriver .. gain de performances presque 3 fois supérieur ..
UberNeo
4
En outre, je tiens simplement à mentionner que l'argument passé au constructeur est le chemin vers le binaire ChromeDriver et non le répertoire contenant le binaire ChromeDriver (gaspillé la dernière demi-heure à comprendre ce qui n'allait pas).
TheRookierLearner
107

Pour Linux

  1. Vérifiez que vous avez installé la dernière version de chrome brwoser-> chromium-browser -version
  2. Sinon, installez la dernière version de chrome sudo apt-get install chromium-browser
  3. obtenir la version appropriée du pilote chrome à partir d' ici
  4. Décompressez le fichier chromedriver.zip
  5. Déplacer le fichier dans le /usr/binrépertoiresudo mv chromedriver /usr/bin
  6. Aller au /usr/binrépertoirecd /usr/bin
  7. Maintenant, vous devez exécuter quelque chose comme sudo chmod a+x chromedriverpour le marquer comme exécutable.
  8. enfin, vous pouvez exécuter le code.

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get("http://www.google.com")
    print driver.page_source.encode('utf-8')
    driver.quit()
    display.stop()
Vicky
la source
1
Très agréable! Une note: je n'ai pu faire fonctionner cela qu'avec le chromedriver 32 bits bien que j'utilise Linux 64 bits.
Imran
Sur Ubuntu (14.04), vous pouvez installer le package chromium-chromdriver (par exemple avec apt-get) et ajouter le chemin du fichier chromedriver à la variable PATH shell PATH = "$ {PATH}": / usr / lib / chromium-browser / Si vous ajoutez ceci à votre .bashrc, vous n'aurez pas besoin de le définir à chaque fois que vous voudrez tester avec du sélénium.
Arpad Horvath
1
en fait, cette réponse devrait avoir beaucoup plus de votes positifs. en gros, c'est la voie à suivre pour chaque pilote comme le geckodriver.
holzkohlengrill
Ma version de navigateur chrome est mentionnée comme (Chromium 67.0.3396.99 Construit sur Ubuntu, fonctionnant sous Ubuntu 16.04) mais le lien n'a que des versions 2.0-2.9. Besoin d'aide.
Vaibhav Maheshwari
93

Mac OSX uniquement

Un moyen plus simple de commencer (en supposant que vous avez déjà installé homebrew , que vous devriez, sinon, faites-le d'abord et laissez homebrew vous rendre la vie meilleure) est de simplement exécuter la commande suivante:

brew install chromedriver

Cela devrait mettre le chromedriver sur votre chemin et vous devriez être prêt.

Jachin
la source
Cela ne peut pas fonctionner sur Mac. selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH.
wyx
1
@wyx Votre environnement n'est peut-être pas correctement configuré. Essayez de courir brew doctoret voyez si cela trouve quelque chose.
Jachin le
2
C'est l'un de ces moments chaleureux et flous où vous êtes simplement heureux d'avoir un Mac. Si facile.
Utilisateur
CŒUR! I love brew
RHSMan
52

Pour les fenêtres

Téléchargez ChromeDriver à partir de ce lien direct OU obtenez la dernière version sur cette page .

Collez le chromedriver.exefichier dans votre C:\Python27\Scriptsdossier.

Cela devrait fonctionner maintenant:

from selenium import webdriver
driver = webdriver.Chrome()
Abdul Majeed
la source
23

Pour les fenêtres, veuillez chromedriver.exeplacer le sous<Install Dir>/Python27/Scripts/

user2253967
la source
et où mettre ubuntu? int /usr/lib/ou ailleurs?
Gaurav Jain
Avoir le fichier PATHne suffisait pas, le placer là /Scripts/où il ride.pyest travaillé.
Qwerty
1

Il existe 2 façons d'exécuter des tests Selenium python dans Google Chrome. J'envisage Windows (Windows 10 dans mon cas):

Prérequis: téléchargez le dernier pilote Chrome sur: https://sites.google.com/a/chromium.org/chromedriver/downloads

Voie 1:

i) Extrayez le fichier zip téléchargé dans un répertoire / emplacement de votre choix
ii) Définissez le chemin de l'exécutable dans votre code comme ci-dessous:

self.driver = webdriver.Chrome(executable_path='D:\Selenium_RiponAlWasim\Drivers\chromedriver_win32\chromedriver.exe')

Voie 2:

i) Collez simplement le chromedriver.exe sous / Python / Scripts / (Dans mon cas, le dossier était: C: \ Python36 \ Scripts)
ii) Maintenant, écrivez le code simple comme ci-dessous:

self.driver = webdriver.Chrome()
Ripon Al Wasim
la source
-1

Pour l'IDE de Windows:

Si votre chemin ne fonctionne pas, vous pouvez essayer d'ajouter le chromedriver.exeà votre projet, comme dans cette structure de projet.

chromedriver.exe

Ensuite, vous devez charger le chromedriver.exedans votre fichier principal. Quant à moi, j'ai chargé le driver.exein driver.py.

def get_chrome_driver():
return webdriver.Chrome("..\\content\\engine\\chromedriver.exe",
                            chrome_options='--no-startup-window')

..signifie driver.py'srépertoire supérieur

. désigne le répertoire où le driver.py se trouve le

J'espère que cela vous sera utile.

tyrantqiao
la source