Skip to content

Instantly share code, notes, and snippets.

@elcamino
Last active February 1, 2024 21:41
Show Gist options
  • Save elcamino/5f562564ecd2fb86f559 to your computer and use it in GitHub Desktop.
Save elcamino/5f562564ecd2fb86f559 to your computer and use it in GitHub Desktop.
How to take full-page screenshots with Selenium and Google Chrome in Ruby
#!/usr/bin/env ruby
require 'selenium-webdriver'
wd = Selenium::WebDriver.for :remote, url: 'http://10.3.1.7:4444/wd/hub', desired_capabilities: :chrome
wd.navigate.to 'https://snipt.net/restrada/python-selenium-workaround-for-full-page-screenshot-using-chromedriver-2x/'
# Get the actual page dimensions using javascript
#
width = wd.execute_script("return Math.max(document.body.scrollWidth, document.body.offsetWidth, document.documentElement.clientWidth, document.documentElement.scrollWidth, document.documentElement.offsetWidth);")
height = wd.execute_script("return Math.max(document.body.scrollHeight, document.body.offsetHeight, document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight);")
# Add some pixels on top of the calculated dimensions for good
# measure to make the scroll bars disappear
#
wd.manage.window.resize_to(width+100, height+100)
img = wd.screenshot_as(:png)
File.open('full-page.png', 'w+') do |fh|
fh.write img
end
wd.quit
@buurkeey
Copy link

It doesn't for me. I still get only visible screen's screenshot.

unfortunately same for me too

@chhunge
Copy link

chhunge commented Jul 22, 2019

It doesn't for me. I still get only visible screen's screenshot.

unfortunately same for me too

same =(

@Rayseus
Copy link

Rayseus commented Sep 4, 2019

Hi it will change the browser window size every time which is not good for screenshot many times

@rgisiger
Copy link

rgisiger commented Jul 6, 2021

The calculation seems to work only in headless mode for me, otherwise it seems like it takes the maximal resolution of the screen displaying the tests.

@arsandov
Copy link

arsandov commented Jul 7, 2021

It worked for me on headless mode, but I had to call:

wd.save_screenshot(Rails.root.join("path","filename.png"))

instead of:

img = wd.screenshot_as(:png)

File.open('full-page.png', 'w+') do |fh|
  fh.write img
end

Otherwise, I got encoding issues.

@durcak
Copy link

durcak commented Sep 12, 2023

This code worked for chrome:

options = Selenium::WebDriver::Options.chrome(args: ['--headless=new'])
driver = Selenium::WebDriver.for(:chrome, options: options)

driver.navigate.to url..

driver.manage.window.maximize
width  = driver.execute_script("return Math.max(document.body.scrollWidth, document.body.offsetWidth, document.documentElement.clientWidth, document.documentElement.scrollWidth, document.documentElement.offsetWidth);")
height = driver.execute_script("return Math.max(document.body.scrollHeight, document.body.offsetHeight, document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight);")
driver.manage.window.resize_to([width, 1500].min, [height, 3000].min) #Restrict to maximum of 1500 x 3000

driver.save_screenshot('full-page.png', full_page: false)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment