Esecuzione di attacchi in pitone Selenium WebDriver in cromo


147

Ho riscontrato un problema mentre lavoravo con il selenio. Per il mio progetto, devo usare Chrome. Tuttavia, non riesco a collegarmi a quel browser dopo averlo avviato con Selenium.

Per qualche ragione, Selenium non riesce a trovare Chrome da solo. Questo è ciò che accade quando provo ad avviare Chrome senza includere un percorso:

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'

Per risolvere questo problema, ho quindi incluso il percorso Chromium nel codice che avvia Chrome. Tuttavia, l'interprete non riesce a trovare un socket a cui connettersi:

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'

Ho anche provato a risolvere il problema avviando Chrome con:

cromo --remote-shell-port = 9222

Tuttavia, neanche questo ha funzionato.

PS. Ecco alcune informazioni sul mio sistema:

client www: cromo 15.0.874.121  
dev-lang: python 2.7.2-r3 Selenium 2.11.1  
Sistema operativo: GNU / Linux Gentoo Kernel 3.1.0-gentoo-r1

Volevo solo farti sapere che "--remote-shell-port" non è un'opzione della riga di comando valida. Vedi: peter.sh/experiments/chromium-command-line-switches ("--remote-debugging-port" sarebbe quello corretto. Tieni presente che devi chiudere tutte le istanze di cromo prima di usare quell'opzione. la nuova finestra in una sessione del browser esistente non funziona).
Data

Risposte:


133

Devi assicurarti che il binario autonomo ChromeDriver (che è diverso dal binario del browser Chrome) sia nel tuo percorso o disponibile nella variabile d'ambiente webdriver.chrome.driver.

consultare http://code.google.com/p/selenium/wiki/ChromeDriver per informazioni complete su come collegare le cose.

Modificare:

Bene, sembra essere un bug negli attacchi Python wrt che legge il binario del chromedriver dal percorso o dalla variabile d'ambiente. Sembra che chromedriver non sia sulla tua strada, devi passarlo come argomento al costruttore.

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

Scusa, dimentica di dirlo. Ho questo link.
Akendo,

2
Ho provato Chromedriver invece di Firefox Webdriver .. quasi 3 volte il guadagno in termini di prestazioni ..
UberNeo

4
Inoltre, voglio solo menzionare che l'argomento passato al costruttore è il percorso del binario di ChromeDriver e non la directory contenente il binario di ChromeDriver (sprecata nelle ultime mezz'ora per capire cosa non andava).
TheRookierLearner

107

Per Linux

  1. Verifica di aver installato l'ultima versione di Chrome Brwoser-> chromium-browser -version
  2. In caso contrario, installa l'ultima versione di Chrome sudo apt-get install chromium-browser
  3. ottenere la versione appropriata del driver Chrome da qui
  4. Decomprimi il chromedriver.zip
  5. Sposta il file nella /usr/bindirectorysudo mv chromedriver /usr/bin
  6. Vai alla /usr/bindirectorycd /usr/bin
  7. Ora, dovresti eseguire qualcosa di simile sudo chmod a+x chromedriverper contrassegnarlo come eseguibile.
  8. finalmente puoi eseguire il codice.

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get("http://www.google.com")
    print driver.page_source.encode('utf-8')
    driver.quit()
    display.stop()

1
Molto bella! Una nota: sono stato in grado di farlo funzionare solo con il chromedriver a 32 bit anche se sto eseguendo Linux a 64 bit.
Imran,

Su Ubuntu (14.04) è possibile installare il pacchetto chromium-chromdriver (ad es. Con apt-get) e aggiungere il percorso del file chromedriver alla variabile della shell PATH PATH = "$ {PATH}": / usr / lib / chromium-browser / Se lo aggiungi al tuo .bashrc, non dovrai impostarlo ogni volta che vuoi testare con selenio.
Arpad Horvath,

1
in realtà questa risposta dovrebbe avere molti più voti. fondamentalmente questa è la strada da percorrere per ogni pilota come il geckodriver.
holzkohlengrill

La mia versione del browser Chromium è menzionata come (Chromium 67.0.3396.99 Costruito su Ubuntu, in esecuzione su Ubuntu 16.04) ma il collegamento ha solo versioni 2.0-2.9. Bisogno di aiuto.
Vaibhav Maheshwari,

93

Solo per Mac OSX

Un modo più semplice per iniziare (supponendo che tu abbia già installato homebrew , che in caso contrario dovresti farlo prima e lasciare che homebrew ti renda migliore la vita) è semplicemente eseguire il seguente comando:

brew install chromedriver

Ciò dovrebbe mettere il chromedriver nel tuo percorso e dovresti essere pronto.


Non può funzionare su Mac. selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH.
Wyx,

1
@wyx Il tuo ambiente potrebbe non essere configurato correttamente. Prova a correre brew doctore vedi se trova qualcosa.
Jachin,

2
Questo è uno di quei momenti caldi e sfocati in cui sei solo felice di avere un Mac. Così facile.
Utente

CUORE! Adoro la birra
RHSMan,

52

Per windows

Scarica ChromeDriver da questo link diretto O ottieni l'ultima versione da questa pagina .

Incolla il chromedriver.exefile nella tua C:\Python27\Scriptscartella.

Questo dovrebbe funzionare ora:

from selenium import webdriver
driver = webdriver.Chrome()

23

Per Windows, si prega di avere il chromedriver.exeposto sotto<Install Dir>/Python27/Scripts/


e dove mettere in Ubuntu? int /usr/lib/o altrove?
Gaurav Jain,

Avere il file dentro PATHnon era abbastanza, mettendolo /Scripts/dove ride.pyfunzionava.
Qwerty,

1

Esistono 2 modi per eseguire i test del pitone Selenium in Google Chrome. Sto considerando Windows (Windows 10 nel mio caso):

Prerequisito: scarica l'ultimo driver Chrome da: https://sites.google.com/a/chromium.org/chromedriver/downloads

Modo 1:

i) Estrai il file zip scaricato in una directory / posizione di tua scelta
ii) Imposta il percorso eseguibile nel tuo codice come di seguito:

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

Modo 2:

i) Basta incollare il chromedriver.exe in / Python / Scripts / (Nel mio caso la cartella era: C: \ Python36 \ Scripts)
ii) Ora scrivi il codice semplice come di seguito:

self.driver = webdriver.Chrome()

-1

Per l'IDE di Windows:

Se il tuo percorso non funziona, puoi provare ad aggiungerlo chromedriver.exeal tuo progetto, come in questa struttura di progetto.

chromedriver.exe

Quindi dovresti caricare il chromedriver.exenel tuo file principale. Per quanto mi riguarda, ho caricato il file driver.exein driver.py.

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

..significa driver.py'sdirectory superiore

.indica la directory in cui driver.pysi trova

Spero che questo possa essere utile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.