#python #selenium #firefox #screenshot #geckodriver
#python #селен #firefox #скриншот #geckodriver
Вопрос:
Я хочу сделать снимок экрана всего тела веб-страницы, используя драйвер Selenium и Gecko. Однако при использовании безголового режима разрешение выходного сигнала намного ниже, чем в безголовом режиме. Я также проверил window_size
, но для него установлены одинаковые значения для безголового и безголового браузера.
У меня есть следующий код:
from selenium import webdriver
import os
#headless browser
opts = webdriver.FirefoxOptions()
opts.headless = True
headlesssess = webdriver.Firefox(executable_path=os.getcwd() "/geckodriver",options=opts)
headlesssess.set_window_size(1920,1080)
print('window size with headless is', headlesssess.get_window_size())
headlesssess.get('https://www.stackoverflow.com')
elem = headlesssess.find_element_by_tag_name('body')
print('body size with headless is ', elem.size)
elem_png = elem.screenshot_as_png
with open('test_headless.png','wb') as f:
f.write(elem_png)
#non-headless browser
opts = webdriver.FirefoxOptions()
opts.headless = False
headsess = webdriver.Firefox(executable_path=os.getcwd() "/geckodriver",options=opts)
headsess.set_window_size(1920,1080)
print('window size with head is ', headsess.get_window_size())
headsess.get('https://www.stackoverflow.com')
elem = headsess.find_element_by_tag_name('body')
print('body size with head is ', elem.size)
elem_png = elem.screenshot_as_png
with open('test_head.png','wb') as f:
f.write(elem_png)
Консольный вывод этого кода выглядит следующим образом:
window size with headless is {'width': 1920, 'height': 1080}
body size with headless is {'height': 5880.68310546875, 'width': 1920.0}
window size with head is {'width': 1792, 'height': 1045}
body size with head is {'height': 5880.216796875, 'width': 1777.0}
Как вы могли заметить, разрешение body
элемента почти такое же, как и разрешение окна (которое немного ниже для версии с графическим интерфейсом, я полагаю, это из-за элементов GUI)
Однако, когда я увеличиваю визуализированные изображения, вы можете видеть, что разрешение безголового браузера намного выше (правая сторона):
Итак, как это возможно, и как я могу получить разрешение изображения с правой стороны (сгенерированное безголовым браузером), используя безголовый? Я попытался увеличить разрешение окна для безголового браузера, однако это не масштабирует содержимое веб-сайта, как на следующем изображении:
Таким образом, после увеличения масштаба по-прежнему остается более низкое разрешение текста, кнопок и т. Д…
Как я могу это решить? Есть ли какой-нибудь способ, например, установить количество пикселей на дюйм?
Ответ №1:
Так что я, вероятно, нашел решение, если кому-то это интересно. Поскольку я использую Mac, необходимо было установить разные пиксели на дюйм в профиле Firefox, поэтому вместо:
opts = webdriver.FirefoxOptions()
opts.headless = True
headlesssess = webdriver.Firefox(executable_path=os.getcwd() "/geckodriver",options=opts)
это должно быть
prof = webdriver.FirefoxProfile()
prof.set_preference('layout.css.devPixelsPerPx','2.0') #this sets high resolution
headlesssess = webdriver.Firefox(executable_path=os.getcwd() "/geckodriver",options=opts,firefox_profile=prof)