Selenium на Python с Geckdriver вылетает, когда он не находится в безголовом режиме - PullRequest
0 голосов
/ 04 августа 2020

Я пытаюсь использовать Selenium на записной книжке jupyter с geckodriver.

Хотя в режиме без головы все работает нормально, мне нужно видеть окно браузера, так как я учусь ...

Я проверил, что и браузер, и драйвер совместимы, драйвер, добавленный в переменную PATH, и еще несколько советов, которые я видел вокруг ...

Это отлично работает:

from selenium import webdriver
from selenium.webdriver.firefox.options import Options

options = Options()
options.headless = True
driver = webdriver.Firefox(options=options)
driver.get("http://google.com/")
print ("Headless Firefox Initialized")
driver.quit()

Но при удалении безголовой опции происходит сбой:

WebDriverException: Сообщение: недопустимый аргумент: невозможно убить завершенный процесс

Единственная подсказка Я могу найти его в geckodriver.log , где я могу прочитать:

1596560987355 mozrunner :: runner INFO Выполняемая команда: "/ bin / firefox" "-marionette" "-foreground" "-no-remote" "-profile" "/ tmp / rust_mozprofilejjh45q" Ошибка: не указана переменная среды DISPLAY

Я проверил, существует ли эта переменная, и это похоже на ДИСПЛЕЙ: 0 . Я также попытался изменить значение, чтобы установить его на свой ip и порт ....

Это меня немного бесит, так что если кто-то может протянуть мне руку, это будет здорово !! Заранее спасибо !!

-> Обновление: как предложил @Wunderbread, SeleniumBase работает без проблем.

-> Обновление: я работал с Selenium на Jupiter Hub. Ни один из них не работает с деревом jupyter, PyCharm или VS C, но ... отлично работает из сценария на терминале ... в жизни есть загадки .... xDD

1 Ответ

0 голосов
/ 04 августа 2020

Похоже, вы удаляете options.headless = True, и драйвер ищет эту опцию. Установите для параметра headless значение options.headless = False

Или напишите что-нибудь, где headless станет необязательным аргументом, например:

from selenium.webdriver.firefox.options import Options as FirefoxOptions
from selenium import webdriver

options = FirefoxOptions()
options.add_argument("--headless")
driver = webdriver.Firefox(options=options)
driver.get("http://google.com")

ОБНОВЛЕНИЕ: я предложил использовать SeleniumBase, поскольку он предоставляет вам основу для набора тестов setup.

Однако стоит отметить, что с помощью следующего кода я смог переключаться между безголовым и браузером для тестов. Я использовал homebrew для моих местных требований к geckodriver на Ma c OS 10.15.6 и Python 3.8

from selenium import webdriver
from selenium.webdriver.firefox.options import Options

options = Options()
options.headless = False
driver = webdriver.Firefox(options=options)
driver.get("https://google.com/")
driver.quit()
...