WebDriverException: служба ... \ firefox .exe неожиданно завершила ошибку, используя GeckDriver Firefox через Selenium - PullRequest
1 голос
/ 05 февраля 2020

selenium использует «фальшивые» браузеры, которые отклоняются при входе в Google («Это браузерное приложение не является безопасным»), mechanize не имеет GUI, webbrowser не может нажать. Есть ли какой-нибудь пакет, который может открыть «обычный» браузер, который не будет отклонен сторонними службами?


Для справки, вот что произойдет, если я попытаюсь предоставить «обычный» Firefox исполняемый путь к селену:

from selenium import webdriver
exepath = r"C:\Program Files\Firefox Developer Edition\firefox.exe"
driver = webdriver.Firefox(executable_path=exepath)

Браузер открывается, но селену не удается подключиться:

File "D:\Anaconda\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 164, in __init__
self.service.start()
File "D:\Anaconda\lib\site-packages\selenium\webdriver\common\service.py", line 98, in start
self.assert_process_still_running()
File "D:\Anaconda\lib\site-packages\selenium\webdriver\common\service.py", line 111, in assert_process_still_running
% (self.path, return_code)

WebDriverException: Service C:\Program Files\Firefox Developer Edition\firefox.exe unexpectedly exited. 
Status code was: 0

Я искал эту точную ошибку - все решения указывают на использование " WebDriver "(т.е." поддельный браузер "). Пробовал также с Chrome - та же сделка, за исключением того, что он сначала ждет 30 секунд, прежде чем выдать ошибку.


Примечание : geckodriver и ChromeDriver оба WebDrivers - "поддельные" браузеры.

Примечание 2 : это сообщение, которое я получаю: (и ссылка на Подробнее )

image

Вот как выглядит URL WebDriver:

enter image description here

Ответы [ 3 ]

0 голосов
/ 05 февраля 2020

exepath путь к гекодриверу не нужен firefox.

exepath = r"path\geckodriver.exe"


driver = webdriver.Firefox(executable_path=exepath)
0 голосов
/ 05 февраля 2020

Немного подробностей о вашем сценарии использования и о том, почему Selenium использует поддельные браузеры, помогло бы нам создать более канонический ответ.

Однако Начнем с того, что по этой причине почему Firefox требуется GeckoDriver и GeckoDriver накапливает новый moz: profile на лету во время каждого выполнения.

Подробное обсуждение можно найти в Это Firefox или Geckodriver, который создает каталог «rust_mozprofile *


Ошибка Facing

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

WebDriverException: Service C:\Program Files\Firefox Developer Edition\firefox.exe unexpectedly exited. 
Status code was: 0

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


executetable_path

executetable_path - это параметр, через который пользователи могут передать абсолютный путь двоичного файла GeckoDriver , переопределяющего системный путь GeckoDriver двоичный файл, который будет использоваться для Firefox 47.0.1 и выше.

Подробное обсуждение можно найти в Что такое исполняемый_путь в Google Colab Laboratory для geckodriver ?


Этот сценарий использования

Для предоставления обычного Firefox исполняемого / двоичного пути, который вам нужен используйте свойство binary через экземпляр FirefoxOptions() следующим образом:

from selenium import webdriver

binary = r'C:\Program Files\Firefox Developer Edition\firefox.exe'
options = webdriver.FirefoxOptions()
options.binary = binary
browser = webdriver.Firefox(firefox_options=options, executable_path=r'C:\path\to\geckodriver.exe')
browser.get('http://google.com/')

Подробное обсуждение можно найти в Как открыть Firefox Developer Edition через Selenium


Это браузерное приложение небезопасно

Причиной этой ошибки может быть множество причин:

Решение

В этих случаях соответствующим решением было бы:


Ссылка

Вы можете найти несколько подробных обсуждений в:

0 голосов
/ 05 февраля 2020

Selenium не имеет «поддельных» браузеров, он использует браузеры, установленные на машине. executable_path для geckodriver / ChromeDriver, а не firefox.exe.

exepath = "path_to\geckodriver.exe"
driver = webdriver.Firefox(executable_path=exepath)
...