Selenium Headless Firefox WebDriver using PyVirtualDisplay

I needed to take screenshots from websites that i crawl and selenium headless webdriver is the right tool for me. I was using wkhtmltoimage untill now but I am running into problems with some websites.

I’ll be using Debian Linux for this without a Desktop environment so i needed to install selenium headless webdriver and I decided to use Firefox as a web browser.

Selenium Headless WebDriver requirements

Since we don’t have a screen to run Firefox we are going to be using Xvfb to simulate a display and run everything in memory.

apt-get install xvfb

Now we are going to install Firefox and few requirements that maybe already installed on your system but here are anyway:

echo -e "\ndeb all main" | tee -a /etc/apt/sources.list > /dev/null
apt-key adv --recv-keys --keyserver C1289A29
apt-get update
apt-get install firefox-mozilla-build
apt-get install libdbus-glib-1-2
apt-get install libgtk2.0-0
apt-get install libasound2

Now we need PyVirtualDisplay which is a python wrapper for Xvfb used for easy working with virtual displays in python.

pip install pyvirtualdisplay

Now we are going to install selenium as a final component for our project:

pip install selenium

Now here is a simple python script to take a screenshot from a website:

#!/usr/bin/env python

from pyvirtualdisplay import Display
from selenium import webdriver

# Set screen resolution to 1366 x 768 like most 15" laptops
display = Display(visible=0, size=(1366, 768))

# now Firefox will run in a virtual display.
browser = webdriver.Firefox()

# Sets the width and height of the current window
browser.set_window_size(1366, 768)

# Open the URL

# set timeouts
browser.set_page_load_timeout(30) # seconds

# Take screenshot

# quit browser

# quit Xvfb display

This will create a file vionblog.png with the screenshot of front page taken with screen resolution of 1366 x 768

Selenium Headless Screenshot

Hope this helps you in taking screenshots from the websites you need.