Ausführen von Selenium WebDriver-Python-Bindungen in Chrome

147

Bei der Arbeit mit Selen bin ich auf ein Problem gestoßen. Für mein Projekt muss ich Chrome verwenden. Ich kann jedoch keine Verbindung zu diesem Browser herstellen, nachdem ich ihn mit Selenium gestartet habe.

Aus irgendeinem Grund kann Selenium Chrome nicht selbst finden. Dies passiert, wenn ich versuche, Chrome ohne Pfad zu starten:

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'

Um dieses Problem zu lösen, habe ich den Chromium-Pfad in den Code aufgenommen, mit dem Chrome gestartet wird. Der Interpreter findet jedoch keinen Socket, zu dem eine Verbindung hergestellt werden kann:

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'

Ich habe auch versucht, das Problem zu lösen, indem ich Chrome gestartet habe mit:

Chrom - Fernschalenport = 9222

Dies funktionierte jedoch auch nicht.

PS. Hier einige Informationen zu meinem System:

www-client: chrom 15.0.874.121  
dev-lang: Python 2.7.2-r3 Selen 2.11.1  
Betriebssystem: GNU / Linux Gentoo Kernel 3.1.0-gentoo-r1
Akendo
quelle
Ich wollte Sie nur wissen lassen, dass "--remote-shell-port" keine gültige Befehlszeilenoption ist. Siehe: peter.sh/experiments/chromium-command-line-switches ("--remote-debugging-port" wäre der richtige. Bitte beachten Sie, dass Sie alle Chrominstanzen schließen müssen, bevor Sie diese Option verwenden neues Fenster in einer vorhandenen Browsersitzung funktioniert nicht).
dpat

Antworten:

133

Sie müssen sicherstellen, dass sich die eigenständige ChromeDriver-Binärdatei (die sich von der Chrome-Browser-Binärdatei unterscheidet) entweder in Ihrem Pfad befindet oder in der Umgebungsvariablen webdriver.chrome.driver verfügbar ist.

Ausführliche Informationen zum Verdrahten finden Sie unter http://code.google.com/p/selenium/wiki/ChromeDriver .

Bearbeiten:

Richtig, scheint ein Fehler in den Python-Bindungen beim Lesen der Chromedriver-Binärdatei aus dem Pfad oder der Umgebungsvariablen zu sein. Wenn sich chromedriver nicht in Ihrem Pfad befindet, müssen Sie ihn als Argument an den Konstruktor übergeben.

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
quelle
Entschuldigung, vergessen Sie das zu erwähnen. Ich habe diesen Link.
Akendo
2
Versuchte den Chromedriver anstelle von Firefox Webdriver .. fast 3-fache Leistungssteigerung ..
UberNeo
4
Ich möchte auch nur erwähnen, dass das an den Konstruktor übergebene Argument der Pfad zur ChromeDriver-Binärdatei ist und nicht das Verzeichnis, das die ChromeDriver-Binärdatei enthält (es wurde die letzte halbe Stunde verschwendet, um herauszufinden, was falsch lief).
TheRookierLearner
107

Für Linux

  1. Überprüfen Sie, ob Sie die neueste Version von Chrome Brwoser-> installiert haben chromium-browser -version
  2. Wenn nicht, installieren Sie die neueste Version von Chrome sudo apt-get install chromium-browser
  3. entsprechende Version von Chrom - Treiber erhalten von hier
  4. Entpacken Sie die Datei chromedriver.zip
  5. Verschieben Sie die Datei in das /usr/binVerzeichnissudo mv chromedriver /usr/bin
  6. Gehe zu /usr/binVerzeichniscd /usr/bin
  7. Jetzt müssten Sie so etwas wie sudo chmod a+x chromedriverausführen, um es als ausführbar zu markieren.
  8. Endlich können Sie den Code ausführen.

    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
quelle
1
Sehr schön! Ein Hinweis: Ich konnte dies nur mit dem 32-Bit-Chromedriver zum Laufen bringen, obwohl ich 64-Bit-Linux verwende.
Imran
Unter Ubuntu (14.04) können Sie das Chrom-Chrom-Treiber-Paket (z. B. mit apt-get) installieren und den Pfad der Chromedriver-Datei zur PATH-Shell-Variablen PATH = "$ {PATH}" hinzufügen: / usr / lib / chrom-browser / Wenn Sie dies zu Ihrer .bashrc hinzufügen, müssen Sie es nicht jedes Mal einstellen, wenn Sie mit Selen testen möchten.
Arpad Horvath
1
Eigentlich sollte diese Antwort viel mehr positive Stimmen haben. Im Grunde ist dies der richtige Weg für jeden Fahrer wie den Geckodriver.
Holzkohlengrill
Meine Chrom-Browser-Version wird als (Chromium 67.0.3396.99 Built on Ubuntu, läuft unter Ubuntu 16.04) erwähnt, aber der Link hat nur Versionen als 2.0-2.9. Hilfe benötigen.
Vaibhav Maheshwari
93

Nur Mac OSX

Ein einfacher Weg, um loszulegen (vorausgesetzt, Sie haben bereits Homebrew installiert. Wenn nicht, sollten Sie dies zuerst tun und Homebrew Ihr Leben verbessern lassen), indem Sie einfach den folgenden Befehl ausführen:

brew install chromedriver

Das sollte den Chromedriver in deinen Weg bringen und du solltest fertig sein.

Jachin
quelle
Auf dem Mac funktioniert es nicht. selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH.
Wyx
1
@wyx Ihre Umgebung ist möglicherweise nicht richtig eingerichtet. Versuchen Sie zu rennen brew doctorund sehen Sie, ob das etwas findet.
Jachin
2
Dies ist einer dieser warmen und verschwommenen Momente, in denen Sie nur froh sind, einen Mac zu haben. So einfach.
Benutzer
HERZ! Ich liebe Brauen
RHSMan
52

Für Windows

Laden Sie ChromeDriver über diesen direkten Link herunter ODER holen Sie sich die neueste Version von dieser Seite .

Fügen Sie die chromedriver.exeDatei in Ihren C:\Python27\ScriptsOrdner ein.

Das sollte jetzt funktionieren:

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

Für Fenster bitte chromedriver.exeunter platzieren<Install Dir>/Python27/Scripts/

user2253967
quelle
und wo in Ubuntu setzen? int /usr/lib/oder woanders?
Gaurav Jain
Die Datei zu haben PATHwar nicht genug, um sie /Scripts/dort abzulegen, wo sie ride.pyfunktioniert.
Qwerty
1

Es gibt zwei Möglichkeiten, Selenium-Python-Tests in Google Chrome auszuführen. Ich denke über Windows nach (in meinem Fall Windows 10):

Voraussetzung: Laden Sie den neuesten Chrome-Treiber von folgender Adresse herunter: https://sites.google.com/a/chromium.org/chromedriver/downloads

Weg 1:

i) Extrahieren Sie die heruntergeladene Zip-Datei in ein Verzeichnis / einen Speicherort Ihrer Wahl.
ii) Legen Sie den ausführbaren Pfad in Ihrem Code wie folgt fest:

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

Weg 2:

i) Fügen Sie einfach die Datei chromedriver.exe unter / Python / Scripts / ein (in meinem Fall war der Ordner: C: \ Python36 \ Scripts)
ii) Schreiben Sie nun den einfachen Code wie folgt :

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

Für die Windows-IDE:

Wenn Ihr Pfad nicht funktioniert, können Sie versuchen, den Pfad chromedriver.exewie in dieser Projektstruktur zu Ihrem Projekt hinzuzufügen .

chromedriver.exe

Dann sollten Sie das chromedriver.exein Ihre Hauptdatei laden . Ich habe das driver.exein geladen driver.py.

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

..bedeutet driver.py'soberes Verzeichnis

.bedeutet das Verzeichnis, in dem driver.pysich das befindet

Hoffe das wird hilfreich sein.

Tyrantqiao
quelle