Executando ligações python do Selenium WebDriver no chrome

147

Encontrei um problema ao trabalhar com o Selenium. Para o meu projeto, eu tenho que usar o Chrome. No entanto, não consigo me conectar a esse navegador depois de iniciá-lo com o Selenium.

Por alguma razão, o Selenium não consegue encontrar o Chrome por si só. É o que acontece quando tento iniciar o Chrome sem incluir um caminho:

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'

Para resolver esse problema, incluí o caminho do Chromium no código que inicia o Chrome. No entanto, o intérprete falha ao encontrar um soquete ao qual se conectar:

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'

Eu também tentei resolver o problema iniciando o chrome com:

chromium --remote-shell-port = 9222

No entanto, isso também não funcionou.

PS. Aqui estão algumas informações sobre o meu sistema:

www-client: chromium 15.0.874.121  
dev-lang: python 2.7.2-r3 Selenium 2.11.1  
SO: GNU / Linux Gentoo Kernel 3.1.0-gentoo-r1
Akendo
fonte
Eu só queria que você soubesse que "--remote-shell-port" não é uma opção de linha de comando válida. Consulte: peter.sh/experiments/chromium-command-line-switches ("--remote-debugging-port" seria o correto. Lembre-se de que você precisa fechar todas as instâncias de cromo antes de usar essa opção. nova janela em uma sessão existente do navegador não funciona).
amigos estão dizendo sobre dpat

Respostas:

133

Você precisa garantir que o binário independente do ChromeDriver (que seja diferente do binário do navegador Chrome) esteja no seu caminho ou esteja disponível na variável de ambiente webdriver.chrome.driver.

consulte http://code.google.com/p/selenium/wiki/ChromeDriver para obter informações completas sobre como conectar as coisas.

Editar:

Certo, parece haver um erro nas ligações do Python, ao ler o binário chromedriver do caminho ou da variável de ambiente. Parece que o chromedriver não está no seu caminho, você deve passá-lo como argumento ao construtor.

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
fonte
Desculpe, esqueça de mencionar isso. Eu tenho esse link.
Akendo
2
Tentei o Chromedriver em vez de Firefox Webdriver .. quase 3 vezes o ganho de desempenho ..
UberNeo
4
Além disso, quero apenas mencionar que o argumento transmitido ao construtor é o caminho para o binário do ChromeDriver e não o diretório que contém o binário do ChromeDriver (desperdiçado nas últimas meia hora para descobrir o que estava errado).
TheRookierLearner
107

Para Linux

  1. Verifique se você instalou a versão mais recente do chrome brwoser-> chromium-browser -version
  2. Caso contrário, instale a versão mais recente do chrome sudo apt-get install chromium-browser
  3. obtenha a versão apropriada do driver chrome daqui
  4. Descompacte o arquivo chromedriver.zip
  5. Mova o arquivo para o /usr/bindiretóriosudo mv chromedriver /usr/bin
  6. /usr/binDiretório Gotocd /usr/bin
  7. Agora, você precisaria executar algo como sudo chmod a+x chromedriverpara marcá-lo como executável.
  8. finalmente, você pode executar o código.

    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
fonte
1
Muito agradável! Uma observação: eu só consegui fazer isso funcionar com o chromedriver de 32 bits, embora eu esteja executando o linux de 64 bits.
21815 Imran Imran
No Ubuntu (14.04), você pode instalar o pacote chromium-chromdriver (por exemplo, com o apt-get) e adicionar o caminho do arquivo chromedriver à variável de shell PATH PATH = "$ {PATH}": / usr / lib / chromium-browser / Se você adicionar isso ao seu .bashrc, não precisará defini-lo sempre que quiser testar o selênio.
Arpad Horvath
1
na verdade, essa resposta deve ter muito mais votos positivos. basicamente, este é o caminho a seguir para todos os drivers como o geckodriver.
precisa saber é o seguinte
Minha versão do navegador chromium é mencionada como (Chromium 67.0.3396.99 Criada no Ubuntu, executando o Ubuntu 16.04), mas o link possui apenas versões como 2.0-2.9. Precisa de alguma ajuda.
Vaibhav Maheshwari
93

Apenas Mac OSX

Uma maneira mais fácil de seguir em frente (supondo que você já tenha o homebrew instalado, o que você deve fazer se não o fizer primeiro e deixar o homebrew melhorar sua vida) é apenas executar o seguinte comando:

brew install chromedriver

Isso deve colocar o chromedriver no seu caminho e você deve estar pronto.

Jachin
fonte
Não pode funcionar no Mac. selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH.
wyx 10/09
1
@wyx Seu ambiente pode não estar configurado corretamente. Tente correr brew doctore veja se isso encontra alguma coisa.
Jachin
2
Esse é um daqueles momentos quentes e confusos em que você fica feliz por ter um Mac. Tão fácil.
Utilizador
CORAÇÃO! Eu amo brew
RHSMan
52

Para Windows

Faça o download do ChromeDriver neste link direto OU obtenha a versão mais recente desta página .

Cole o chromedriver.exearquivo na sua C:\Python27\Scriptspasta.

Isso deve funcionar agora:

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

Para janelas, chromedriver.execoloque-o sob<Install Dir>/Python27/Scripts/

user2253967
fonte
e onde colocar no ubuntu? int /usr/lib/ou em outro lugar?
Gaurav Jain
PATHNão basta ter o arquivo , colocá-lo no local /Scripts/onde ride.pyé trabalhado.
Qwerty
1

Existem duas maneiras de executar testes python Selenium no Google Chrome. Estou considerando o Windows (Windows 10 no meu caso):

Pré-requisito: Faça o download do driver Chrome mais recente em: https://sites.google.com/a/chromium.org/chromedriver/downloads

Caminho 1:

i) Extraia o arquivo zip baixado em um diretório / local de sua escolha.
ii) Defina o caminho do executável no seu código como abaixo:

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

Caminho 2:

i) Basta colar o chromedriver.exe em / Python / Scripts / (no meu caso, a pasta era: C: \ Python36 \ Scripts)
ii) Agora escreva o código simples como abaixo:

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

Para o IDE do Windows:

Se o seu caminho não funcionar, você pode tentar adicioná-lo chromedriver.exeao seu projeto, como nesta estrutura do projeto.

chromedriver.exe

Então você deve carregar o chromedriver.exearquivo principal. Quanto a mim, eu carreguei o driver.exeno driver.py.

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

..significa driver.py'sdiretório superior

.significa o diretório em que driver.pyestá localizado

Espero que isso seja útil.

tyrantqiao
fonte