Selenium не загружает страницу при запуске chrome без заголовка - python - предупреждение или ошибка всплывающего окна - PullRequest
0 голосов
/ 01 июня 2019

(нерелевантная справочная информация: мой ноутбук был украден, я делаю это так, чтобы, если это когда-нибудь случится снова, у меня был приличный шанс его восстановить)

ПРОБЛЕМА:

Итак, я пытаюсь запустить скрипт Python, который (тайно) снимает скриншот с текущей геолокации в соответствии с данным сайтом: https://gps -coordinates.org / my-location.php

Отлично работает без опции без головы, но при этом местоположение просто не загружается.Я подозреваю, что безголовый режим не позволяет правильно отображать всплывающие окна или оповещения, и поэтому Chrome не может «запомнить» мой выбор всегда разрешать местоположение.

Я посмотрел исходный код, и информация о местоположении поступилавверх под классом "leaflet-popup-content"

ЧТО Я ПОПРОБОВАЛ:

Я уже пытался использовать ожидание присутствующего элемента

, как показано ниже:

def waitForLoad(browser):
    try:
        WebDriverWait(browser, 10, ignored_exceptions=[
            NoSuchElementException, TimeoutException
        ]).until(EC.presence_of_element_located((By.CLASS_NAME,'leaflet-popup-content')))
    except TimeoutException:
        print("Error, timed out, trying again")
        browser.refresh()
        waitForLoad(browser)
        return

Я также пробовал это с драйвером firefox (geckodriver), но он даже не работает, пока не установлен безголовый

КОД:

import selenium
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-infobars")
browser=webdriver.Chrome('/home/tclack/bin/chromedriver',chrome_options=chrome_options)
# YMMV this is the chromedriver I use and the location

url = "https://gps-coordinates.org/my-location.php"

browser.get(url)

browser.save_screenshot('screenshot.png')
browser.close()
browser.quit()

Ожидаетсяoutput - это файл .png с текущим местоположением, выбранным, как вы увидите, если бы вы запустили это, но закомментировали строку «--headless» (строка 6).(также при условии, что этот сайт находится в «белом списке» с точки зрения разрешенного местоположения)

1 Ответ

0 голосов
/ 27 июня 2019

Тренировки вокруг найдено

Я кое-что понял.На самом деле это совершенно другой угол, чем я пытался.Поэтому я экспериментировал с virtualdisplay, старым решением до появления безголового режима в селене.Я обнаружил, что могу использовать pyvirtualdisplay и установить видимость 0, код точно такой же, но я помещаю его между строк:

from pyvirtualdisplay import Display

display = Display(visible=0, size = [1000,1000])

display.start()

.

.

.

#blah blah blah, selenium code

.

.

.

display.stop()

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...