Eu sou novo em programação e comecei há Python
cerca de 2 meses e estou revisando o texto Automatize o chato de Sweigart com texto em Python . Estou usando o IDLE e já instalei o módulo selênio e o navegador Firefox. Sempre que tentei executar a função webdriver, recebo o seguinte:
from selenium import webdriver
browser = webdriver.Firefox()
Exceção: -
Exception ignored in: <bound method Service.__del__ of <selenium.webdriver.firefox.service.Service object at 0x00000249C0DA1080>>
Traceback (most recent call last):
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 163, in __del__
self.stop()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 135, in stop
if self.process is None:
AttributeError: 'Service' object has no attribute 'process'
Exception ignored in: <bound method Service.__del__ of <selenium.webdriver.firefox.service.Service object at 0x00000249C0E08128>>
Traceback (most recent call last):
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 163, in __del__
self.stop()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 135, in stop
if self.process is None:
AttributeError: 'Service' object has no attribute 'process'
Traceback (most recent call last):
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 64, in start
stdout=self.log_file, stderr=self.log_file)
File "C:\Python\Python35\lib\subprocess.py", line 947, in __init__
restore_signals, start_new_session)
File "C:\Python\Python35\lib\subprocess.py", line 1224, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
browser = webdriver.Firefox()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 135, in __init__
self.service.start()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 71, in start
os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
Acho que preciso definir o caminho para, geckodriver
mas não sei como, para que alguém possa me dizer como eu faria isso?
brew install geckodriver
chromedriver
para isso.Respostas:
Primeiro, você precisará baixar o último geckodriver executável daqui para executar o mais recente firefox usando selênio
Na verdade, as ligações do cliente Selenium tentam localizar o
geckodriver
executável do sistemaPATH
. Você precisará adicionar o diretório que contém o executável ao caminho do sistema.Nos sistemas Unix, você pode fazer o seguinte para anexá-lo ao caminho de pesquisa do sistema, se estiver usando um shell compatível com o bash:
No Windows, você precisará atualizar a variável de sistema Path para adicionar manualmente o caminho completo do diretório ao geckodriver executável ou à linha de comando (não se esqueça de reiniciar o sistema depois de adicionar o geckodriver executável no PATH do sistema para entrar em vigor) . O princípio é o mesmo que no Unix.
Agora você pode executar o seu código da mesma forma que está fazendo como abaixo: -
A exceção afirma claramente que você instalou o firefox em outro local enquanto o Selenium está tentando encontrar o firefox e iniciar a partir do local padrão, mas não foi possível encontrá-lo. Você precisa fornecer explicitamente o local binário instalado do firefox para iniciar o firefox como abaixo: -
fonte
geckodriver.exe
noC:\Python\Python35\selenium
diretório e defino o caminho como você descreveu, mas está me dando o erro abaixo:PATH
ambiente inix. Você pode configurá-lo no código, uma vez que não precisa dele em todo o sistema:os.environ["PATH"] += os.pathsep + 'path/to/dir/containing/geckodriver/'
ou simplesmente mantenha o binário do geckodriver no diretório que já está no seu caminho:mv geckodriver /usr/local/bin
Isso resolveu para mim.
fonte
export PATH=$PATH:geckodriver
(ele é extraído na área de trabalho). Mas também não ajudou. Ainda recebo o OSError [erro 8]estas etapas RESOLVIDO para mim no ubuntu firefox 50.
Baixar geckodriver
Copie o geckodriver em / usr / local / bin
Você NÃO precisa adicionar
fonte
A resposta de @saurabh resolve o problema, mas não explica por que automatizar o material chato com o Python não inclui essas etapas.
Isso é causado pelo fato de o livro ser baseado no selenium 2.xe o driver do Firefox para essa série não precisa do driver gecko. A interface Gecko para acionar o navegador não estava disponível quando o selênio estava sendo desenvolvido.
A versão mais recente da série selenium 2.x é 2.53.6 (veja, por exemplo, estas respostas , para uma visualização mais fácil das versões).
A página da versão 2.53.6 não menciona lagartixa. Mas desde a versão 3.0.2, a documentação afirma explicitamente que você precisa instalar o driver gecko.
Se após uma atualização (ou instalação em um novo sistema), o software que funcionava bem antes (ou no sistema antigo) não funciona mais e você está com pressa, fixe a versão do selênio no virtualenv, executando
mas é claro que a solução a longo prazo para o desenvolvimento é configurar um novo virtualenv com a versão mais recente do selenium, instalar o driver gecko e testar se tudo ainda funciona como esperado. Mas a versão principal da versão pode introduzir outras alterações na API que não são cobertas pelo seu livro; portanto, convém manter o selênio mais antigo, até ter certeza de que poderá corrigir qualquer discrepância entre a API do selênio2 e do selênio3.
fonte
No macOS com o Homebrew já instalado, você pode simplesmente executar o comando Terminal
Como o homebrew já ampliou,
PATH
não há necessidade de modificar nenhum script de inicialização.fonte
Para configurar o geckodriver para o Selenium Python:
Ele precisa definir o caminho do geckodriver com o FirefoxDriver conforme o código abaixo:
Faça o download do geckodriver para o seu sistema operacional adequado (em https://github.com/mozilla/geckodriver/releases ) -> Extraia-o em uma pasta de sua escolha -> Defina o caminho corretamente, conforme mencionado acima
Estou usando o Python 3.6.2 e o Selenium WebDriver 3.4.3 no Windows 10.
Outra maneira de configurar o geckodriver:
i) Simplesmente cole o geckodriver.exe em / Python / Scripts / (no meu caso, a pasta era: C: \ Python36 \ Scripts)
ii) Agora escreva o código simples como abaixo:
fonte
Se você estiver usando o Anaconda , basta ativar o ambiente virtual e instalar o geckodriver usando o seguinte comando :
fonte
Ubuntu 18.04+ e versão mais recente do geckodriver
Isso também deve funcionar para outras variedades * nix.
Para atualização do mac para:
fonte
Vejo as discussões ainda falarem sobre a maneira antiga de configurar o geckodriver baixando o binário e configurando o caminho manualmente.
Isso pode ser feito automaticamente usando o webdriver-manager
Agora, o código acima na pergunta funcionará simplesmente com as alterações abaixo,
fonte
A maneira mais fácil para o Windows!
Baixar a versão mais recente
geckodriver
a partir de aqui . Adicione o arquivo geckodriver.exe ao diretório python (ou a qualquer outro diretório que já esteja dentroPATH
). Isso deve resolver o problema (testado no Windows 10)fonte
Passos para o MAC:
A solução simples é baixar o GeckoDriver e adicioná-lo ao PATH do sistema. Você pode usar uma das duas abordagens:
Método curto:
1) Baixe e descompacte o Geckodriver .
2) Mencione o caminho ao iniciar o driver:
Método longo:
1) Baixe e descompacte o Geckodriver .
2) Abrir
.bash_profile
. Se você não tiver criado ainda, você pode fazer isso usando o comando:touch ~/.bash_profile
. Em seguida, abra-o usando:open ~/.bash_profile
3) Considerando que o arquivo GeckoDriver está presente na sua pasta Downloads, você pode adicionar as seguintes linhas ao
.bash_profile
arquivo:Por isso, você está anexando o caminho do GeckoDriver ao PATH do sistema. Isso informa ao sistema onde o GeckoDriver está localizado ao executar seus scripts do Selenium.
4) Salve
.bash_profile
e force a execução. Isso carrega os valores imediatamente sem precisar reiniciar. Para fazer isso, você pode executar o seguinte comando:source ~/.bash_profile
5) É isso aí. Você terminou!. Você pode executar o script Python agora.
fonte
geckodriver
com o Homebrew:brew install geckodriver
e iniciei o Firefox via:driver = webdriver.Firefox(executable_path="/usr/local/bin/geckodriver")
Algumas informações adicionais / esclarecimentos para futuros leitores deste tópico:
O seguinte é suficiente como uma resolução para o Windows 7, Python 3.6, selenium 3.11:
A nota de @ dsalaj neste tópico anterior para Unix também é aplicável ao Windows; mexer com o caminho PAT. variável no nível do Windows e a reinicialização do sistema Windows podem ser evitadas.
(1) Faça o download do geckodriver (como descrito anteriormente neste tópico) e coloque o (descompactado) geckdriver.exe em X: \ Folder \ of \ your \ choice
(2) Exemplo de código Python:
Notas: (1) Pode levar cerca de 10 segundos para o código acima abrir o navegador Firefox para o URL especificado.
(2) O console python mostraria o seguinte erro se não houver um servidor executando no URL especificado ou exibindo uma página com o título que contém a string 'Django': selenium.common.exceptions.WebDriverException: Mensagem: Página de erro atingida: sobre : neterror? e = connectionFailure & u = http% 3A // localhost% 3A8000 / & c = UTF-8 & f = regular & d = Firefox% 20can% E2% 80% 9
fonte
Na verdade, descobri que você pode usar o último geckodriver sem colocá-lo no caminho do sistema. Atualmente estou usando
https://github.com/mozilla/geckodriver/releases/download/v0.12.0/geckodriver-v0.12.0-win64.zip
Firefox 50.1.0
Python 3.5.2
Selenium 3.0.2
Windows 10
Estou executando um VirtualEnv (que eu gerencio usando PyCharm, presumo que ele use o Pip para instalar tudo)
No código a seguir, posso usar um caminho específico para o geckodriver usando o paramater executable_path (eu descobri isso consultando Lib \ site-packages \ selenium \ webdriver \ firefox \ webdriver.py). Nota: Suspeito que a ordem dos argumentos dos parâmetros ao chamar o webdriver seja importante, e é por isso que o executable_path é o último no meu código (a segunda última linha está à direita)
Você também pode perceber que eu uso um perfil personalizado do firefox para solucionar o problema sec_error_unknown_issuer que você encontrará se o site que está testando tiver um certificado não confiável. Vejo Como desativar o aviso de conexão não confiável do Firefox usando o Selenium?
Após a investigação, verificou-se que o driver Marionette está incompleto e ainda está em andamento, e nenhuma quantidade de configuração de vários recursos ou opções de perfil para dispensar ou definir certificados estava funcionando. Portanto, era mais fácil usar um perfil personalizado.
Enfim, aqui está o código de como eu consegui o geckodriver para trabalhar sem estar no caminho:
fonte
Estou usando o Windows 10 e isso funcionou para mim:
fonte
Considere instalar um Firefox em contêiner:
Conecte-se usando
webdriver.Remote
:fonte
É realmente muito triste que nenhum dos livros publicados no Selenium / Python e a maioria dos comentários sobre esse assunto via Google não explique claramente a lógica do caminho para configurar isso no Mac (tudo é Windows !!!!). O youtubes todos captam no "depois" que você tem a configuração de caminhos (na minha opinião, a saída mais barata!). Portanto, para você maravilhosos usuários de Mac, use o seguinte para editar os arquivos do caminho do bash:
> $ touch ~ / .bash_profile; abra ~ / .bash_profile
Em seguida, adicione um caminho semelhante a este .... * # Configurando PATH para geckodriver PATH = “/ usr / bin / geckodriver: $ {PATH}” export PATH
Configurando PATH para o Firefox Selenium
PATH = "~ / Usuários / seunomePATH / VEnvPythonInterpreter / lib / python2.7 / pacotes de sites / selênio / webdriver / firefox /: $ {PATH}" PATH de exportação
Configurando PATH para executável no driver do firefox
PATH = "/ Usuários / seunomePATH / VEnvPythonInterpreter / lib / python2.7 / pacotes de sites / selênio / webdriver / common / service.py: $ {PATH}" PATH de exportação *
Isso funcionou para mim. Minha preocupação é quando a comunidade do Selenium Windows começará a jogar o jogo real e incluirá os usuários de Mac em sua arrogante associação ao clube.
fonte
O Selenium responde a essa pergunta em seu DESCRIPTION.rst
Basicamente, basta baixar o geckodriver, descompactá-lo e mover o executável para sua pasta / usr / bin
fonte
use o código original como ele é:
faça o download do driver em: mozilla / geckodriver
Coloque-o em um caminho fixo (permanentemente) .. como exemplo, eu o coloquei em:
Em seguida, vá para as variáveis de ambiente do sistema, na grade de "Variáveis do sistema", procure a variável Path e adicione:
geckodriver, não geckodriver.exe .
fonte
No Raspberry Pi, tive que criar a partir do driver ARM e definir o caminho do geckodriver e o logon:
sudo nano /usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py
fonte
Se você usa o ambiente virtual e o win10 (talvez seja para outros sistemas), basta colocar o geckodriver.exe na seguinte pasta no diretório do ambiente virtual:
... \ my_virtual_env_directory \ Scripts \ geckodriver.exe
fonte
isso fará com que você encontre o caminho para o seu gekodriver.exe no Windows
fonte
Mac 10.12.1 python 2.7.10 este trabalho para mim :)
fonte
Estou usando o Windows 10 e o Anaconda2. Tentei definir a variável do caminho do sistema, mas não deu certo. Simplesmente adicionei o arquivo geckodriver.exe à pasta Anaconda2 / Scripts e tudo funciona muito bem agora. Para mim o caminho era: -
C: \ Usuários \ Bhavya \ Anaconda2 \ Scripts
fonte
Se você deseja adicionar os caminhos do driver no Windows 10:
Clique com o botão direito do mouse no ícone "Este PC" e selecione "Propriedades"
Clique em "Configurações avançadas do sistema"
fonte
Visite o Gecko Driver obtenha o URL do driver gecko na seção Downloads.
Clone este repositório https://github.com/jackton1/script_install.git
cd script_install
Corre
fonte
fonte
para mim, bastava instalar o geckodriver no mesmo ambiente:
e o código não foi alterado:
fonte
Para adicionar meus 5 centavos, também é possível fazer
echo PATH
(Linux) e apenas mover o geckodriver para a pasta de sua preferência. Se uma pasta do sistema (não ambiente virtual) for o destino, o driver se tornará acessível globalmente.fonte