Селен неправильное разрешение скриншота при использовании безголового Firefox

#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)