I'sou novo em programação e comecei com Python
cerca de 2 meses atrás e estou revisando Sweigart's Automate the Boring Stuffings with Python text. I'm usando IDLE e já instalado o módulo selenium e o navegador Firefox.
Sempre que eu tentei executar a função webdriver, eu recebi isto:
from selenium import webdriver
browser = webdriver.Firefox()
Excepçã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 de definir o caminho para o geckodriver
mas não sei como, então alguém me pode dizer como é que eu faria isto?
selenium.common.exceptions.WebDriverException: Mensagem: 'geckodriver' o executável tem de estar em PATH.
Na verdade, o cliente Selenium tenta localizar o executável geckodriver
do sistema PATH
. Você precisará adicionar o diretório contendo o executável ao caminho do sistema.
Em sistemas Unix você pode fazer o seguinte para anexá-lo ao caminho de pesquisa do seu sistema, se você estiver usando uma shell compatível com bash:
exportação PATH=$PATH:/caminho/para/directório/de/executável/downloaded/in/previous/step
No Windows você precisará atualizar a variável Path system para adicionar o caminho completo do diretório ao executável geckodriver manualmente ou linha de comando(don'não se esqueça de reiniciar seu sistema após adicionar o executável geckodriver ao sistema PATH para ter efeito). O princípio é o mesmo que no Unix.
Agora você pode executar o seu código como você'está fazendo como abaixo :-
from selenium import webdriver
browser = webdriver.Firefox()
selenium.common.exceptions.WebDriverException: Mensagem: Localização binária esperada do navegador, mas incapaz de encontrar binário na localização padrão, sem 'moz:firefoxOptions.binary' capacidade fornecida, e nenhuma bandeira binária definida na linha de comando
Exceção diz claramente que você instalou o firefox em algum outro local enquanto Selenium está tentando encontrar o firefox e lançar do local padrão, mas ele não conseguiu't encontrar. Você precisa fornecer explicitamente a localização binária instalada do firefox para iniciar o firefox como abaixo :-
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
binary = FirefoxBinary('path/to/installed firefox binary')
browser = webdriver.Firefox(firefox_binary=binary)
estes passos SOLVIDOS para mim no ubuntu firefox 50.
Baixar geckodriver
Copiar o lagarto em /usr/local/bin
Você NÃO precisa adicionar
firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
firefox_capabilities['binary'] = '/usr/bin/firefox'
browser = webdriver.Firefox(capabilities=firefox_capabilities)
É realmente muito triste que nenhum dos livros publicados em Selenium/Python e a maioria dos comentários sobre esta edição via Google não expliquem claramente a lógica de pathing para configurar isto no Mac (tudo é Windows!!!!). Os youtubes todos pegam no "depois" você'tem a configuração de pathing (na minha mente, a saída mais barata!). Então, para você usuários maravilhosos de Mac, use o seguinte para editar seus arquivos de bash path:
>$touch ~/.bash_profile; abrir ~/.bash_profile
Depois adicione um caminho algo como isto.... *# Definindo o PATH para o geckodriver PATH="/usr/bin/geckodriver:${PATH}" patamar de exportação
PATH="~/Users/seuNomePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/selenium/webdriver/firefox/:${PATH}". patamar de exportação
PATH="/Users/yournamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/selenium/webdriver/common/service.py:${PATH}" patamar de exportação*
Isto funcionou para mim. Minha preocupação é quando a comunidade de Selenium Windows começará a jogar o jogo real e nos incluirá como usuários de Mac na sua arrogante associação ao clube.