Webdriverexception: сообщение: браузер, похоже, завершил работу до того, как мы смогли связать ошибку с geckodriver selenium и python

Есть около 100 сообщений об одной и той же проблеме, но ни одна из них, похоже, не работает для меня, поэтому я спрашиваю снова. Я пытаюсь запустить браузер Firefox, используя Python и Selenium, и получаю следующую ошибку:

WebDriverException: Message: The browser appears to have exited before we could connect. If you specified a log_file in the FirefoxBinary constructor, check it for details.

Я пробовал каждый ответ в Интернете, но, похоже, ничего не работает.

Это мой код:

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

caps = DesiredCapabilities.FIREFOX
caps["marionette"] = False

binary = FirefoxBinary('d:\\Desktop\\IEDriver\\geckodriver.exe')

options = Options()
options.set_headless(headless=True)
driver = webdriver.Firefox(firefox_binary=binary, firefox_options=options, executable_path=r'd:\\Desktop\\IEDriver\\geckodriver.exe')
driver.get("http://google.com/")
print ("Headless Firefox Initialized")
driver.quit()

Если я установлю caps["marionette"] = True, то я получаю ошибку

SessionNotCreatedException: Message: Unable to find a matching set of capabilities

Версии программного обеспечения, которое я использую:

Fire Fox: 62.0 (64 бит)

Селен: 3.14.0

Геккон: 0.21.0

Python: 3

Операционные системы: Windows 8.1 64 бит

Любая помощь будет высоко ценится.

Обновлено: Я удалил и переустановил Firefox, но не работал. Также попытался установить Firefox 61.0.2, все равно не повезло.

firefox_binary должен быть путем к исполняемому файлу Firefox (firefox.exe), но не к geckodriver.exe.
Andersson 13.09.2018 21:31
9
1
12 077
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Это сообщение об ошибке ...

WebDriverException: Message: The browser appears to have exited before we could connect. 
If you specified a log_file in the FirefoxBinary constructor, check it for details.

... означает, что GeckoDriver не смог инициировать / создать новый Веб-браузер, то есть сеанс Браузер Firefox.

Вам нужно позаботиться о нескольких вещах, а именно:

  • Чтобы установить FirefoxBinary, вам необходимо использовать FirefoxOptions(), и вместо передачи абсолютный путь двоичного файла геккодрайвер вы должны передать абсолютный путь желаемого двоичного файла Fire Fox.
  • Поскольку вы используете GeckoDriver v0.21.0, вы должны обязательно использовать марионетка, поэтому либо оставьте его без изменений (по умолчанию true), либо установите марионетка на true.
  • Ваш собственный код с внесением незначительных изменений будет:

    from selenium import webdriver
    from selenium.webdriver.firefox.options import Options
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    
    binary = r'C:\Program Files\Mozilla Firefox\firefox.exe'
    options = Options()
    options.set_headless(headless=True)
    options.binary = binary
    cap = DesiredCapabilities().FIREFOX
    cap["marionette"] = True #optional
    driver = webdriver.Firefox(firefox_options=options, capabilities=cap, executable_path="C:\\Utility\\BrowserDrivers\\geckodriver.exe")
    driver.get("http://google.com/")
    print ("Headless Firefox Initialized")
    driver.quit()
    
  • Консольный вывод:

    Headless Firefox Initialized
    
  • Здесь вы можете найти подробное обсуждение Невозможно найти соответствующий набор возможностей с selenium 3.4.3, firefox 54.0 и драйвером gecko 0.17

Убедитесь (особенно в Windows (Win 10)), что ваш браузер и контроллер (python / C / java / perl / etc) либо x64, либо win32, Microsoft больше не будет переключаться между ними.

Итак, если вы пытаетесь управлять 64-битным браузером (который будет загружен по умолчанию из firefox) из x32-битного python, он выйдет, прежде чем вы сможете подключиться ... идите и установите win32-версию firefox, чтобы волшебство произошло

binary = r'C:\Program Files\Mozilla Firefox\firefox.exe'
options = Options()
options.binary = binary
browser = webdriver.Firefox(firefox_options=options, executable_path=r"C:\Drivers\geckodriver.exe")

Хотя этот фрагмент кода может решить вопрос, включая объяснение действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причины вашего предложения кода.

Alessandro Mandelli 12.02.2020 16:24

Попробовав почти все ответы на разных форумах, простая самопроверка разрешила проблему, т.е. вам нужно иметь python, браузер firefox и geckodriver либо в 62-битной, либо в 32-битной версиях. Несоответствие в этом вызвало проблему в моем случае.

Убедившись, что вы используете одну и ту же битовую версию для всех трех компонентов, просто используйте следующие строки для запуска firefox:

ffPath = "C:\\Drivers\\geckodriver.exe"
os.environ["webdriver.firefox.driver"] = ffPath
driver = webdriver.Firefox(executable_path=ffPath)
driver.get(url)

Проблема для меня заключалась в несовпадении версий между python и gekodriver. когда вся вовлеченная сторона была 64-битной, это работало как шарм

Это было бы достойным комментарием к вопросу OP;) Может быть, тогда OP может дать вам больше информации, и вы можете прийти с подробным ответом.

DaveIdito 08.10.2020 14:05

Другие вопросы по теме