(нерелевантная справочная информация: мой ноутбук был украден, я делаю это так, чтобы, если это когда-нибудь случится снова, у меня был приличный шанс его восстановить)
ПРОБЛЕМА:
Итак, я пытаюсь запустить скрипт 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).(также при условии, что этот сайт находится в «белом списке» с точки зрения разрешенного местоположения)