Selenium с използване на Python - Изпълнимият файл на Geckodriver трябва да е в PATH

Аз съм нов в програмирането и започнах с Python преди около 2 месеца и преглеждам текста на Sweigart's Automate the Boring Stuff with Python. Използвам IDLE и вече съм инсталирал модула selenium и браузъра Firefox. Всеки път, когато се опитам да стартирам функцията на webdriver, получавам това:

from selenium import webdriver
browser = webdriver.Firefox()

Изключение :-

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. 

Мисля, че трябва да задам пътя за geckodriver, но не съм сигурен как, така че може ли някой да ми каже как да направя това?

Решение

selenium.common.exceptions.WebDriverException: Съобщение: 'geckodriver' изпълнимият файл трябва да бъде в PATH.

Преди всичко ще трябва да изтеглите най-новия изпълним файл geckodriver оттук, за да стартирате най-новия firefox, използвайки selenium

Всъщност клиентските връзки на Selenium се опитват да намерят изпълнимия файл geckodriver от системния PATH. Ще трябва да добавите директорията, съдържаща изпълнимия файл, към системния път.

  • На Unix системите можете да направите следното, за да я добавите към пътя за търсене на вашата система, ако използвате bash-съвместима обвивка:

      export PATH=$PATH:/path/to/directory/of/executable/downloaded/in/previous/step
  • В Windows ще трябва да актуализирате системната променлива Path, за да добавите пълния път до директорията на изпълнимия geckodriver ръчно или от командния ред(не забравяйте да рестартирате системата си, след като добавите изпълнимия geckodriver в системния PATH, за да влезе в сила). Принципът е същият като при Unix.

Сега можете да стартирате кода си по същия начин, както го правите, както е показано по-долу :-

from selenium import webdriver

browser = webdriver.Firefox()

selenium.common.exceptions.WebDriverException: Message: Очаквано двоично местоположение на браузъра, но не може да се намери двоично местоположение по подразбиране, не е предоставена възможност 'moz:firefoxOptions.binary' и не е зададен двоичен флаг в командния ред

Изключението ясно заявява, че сте инсталирали firefox на друго място, докато Selenium се опитва да намери firefox и да го стартира от мястото по подразбиране, но не може да го намери. Трябва да предоставите изрично двоичното местоположение на инсталирания firefox, за да стартирате firefox, както е посочено по-долу :-

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)
Коментари (14)

тези стъпки са решени за мен на Ubuntu Firefox 50.

  1. Изтегляне на geckodriver

  2. Копирайте geckodriver в /usr/local/bin

НЕ е необходимо да добавяте

firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
firefox_capabilities['binary'] = '/usr/bin/firefox'
browser = webdriver.Firefox(capabilities=firefox_capabilities)
Коментари (6)

Наистина е доста тъжно, че нито една от книгите, публикувани за Selenium/Python, и повечето от коментарите по този въпрос чрез Google не обясняват ясно логиката на пътя, за да настроите това на Mac (всичко е Windows!!!!). Всички youtubes се спират на "след като" сте настроили патинга (според мен това е евтиният изход!). Така че, за вас, прекрасните потребители на Mac, използвайте следното, за да редактирате файловете с пътища на bash:

>$touch ~/.bash_profile; open ~/.bash_profile

След това добавете път по следния начин.... *# Задаване на PATH за geckodriver PATH="/usr/bin/geckodriver:${PATH}" export PATH

Задаване на PATH за Selenium firefox

PATH="~/Users/yourNamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/selenium/webdriver/firefox/:${PATH}" export PATH

Задаване на PATH за изпълнимия файл на драйвера на Firefox

PATH="/Users/yournamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/selenium/webdriver/common/service.py:${PATH}" export PATH*

Това работи за мен. Притеснението ми е кога общността на Selenium Windows ще започне да играе истинската игра и ще включи нас, потребителите на Mac, в членството си в техния арогантен клуб.

Коментари (0)