DEV Community

Sam Texas
Sam Texas

Posted on • Originally published at simplecto.com on

Selenium Can Make Hi-DPI, Retina Style Screenshots (Firefox and Chrome)

With just a single line of code you can modify your Selenium browser to operate in (x.x) density mode. This means you can take higher-DPI screenshots as you might on retina screens.


Firefox Code Sample

my_dpi = 2.0

profile = webdriver.FirefoxProfile()
profile.set_preference("layout.css.devPixelsPerPx", str(my_dpi))

Enter fullscreen mode Exit fullscreen mode

Yes kids, it is this simple. All you need to do is set a preference on your profile.

NOTE: The gotcha here is that you have to cast the float to a string using str(). That is non-obvious and will save you a ton of time in debugging. Otherwise it is silently ignored.


Chrome Code Sample

Chrome is a little different. There is not a preferences profile that you tweak with various settings. In this case you simple pass in a command line option when launching the browser.

my_dpi = 2.0
options = ChromeOptions()
    # ... other options..
    options.add_argument(f"--force-device-scale-factor={my_dpi}")

Enter fullscreen mode Exit fullscreen mode

Full Code Sample

This is an export from my Jupyter Notebook. Note, you will need to pip install selenium as well as have the firefox-geckodriver installed with brew or whatever linux flavor.

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.common.exceptions import NoSuchElementException, WebDriverException
from time import sleep

my_dpi = 2.0

profile = webdriver.FirefoxProfile()
profile.set_preference("layout.css.devPixelsPerPx", str(my_dpi))

options = Options()
options.headless = True
driver = webdriver.Firefox(options=options, firefox_profile=profile)
driver.set_page_load_timeout(60)
driver.set_window_size(1440, 800)

driver.get('https://www.simplecto.com')

driver.save_screenshot("simplecto-dpi2.0.png")
driver.quit()

Enter fullscreen mode Exit fullscreen mode

NOTE : This was not tested on Windows. Sorry not sorry.

You can try DPI at 1.0 and 2.0 to see the sizable difference in disk space and memory required. This becomes a little more work for a CPU when running full-size page screenshots.

Top comments (0)