Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to take screenshot of a website with Rails 3.1? -- without using a service

Almost every answer I've found references using some existing service. Is there a way to do this using Rails 3.1 programmatically? This was dead easy to do with PHP (there are prebuilt libraries in PHP that do this).

What I'm looking to do, given a URL, is:

  1. Take a screenshot of the website

  2. Crop it (only take the top left most 100x100 pixels

PS. Here is my environment: Rails 3.1, Ruby 1.9.2

Note: The solution would probably need to follow any redirections on the URL as well.

Updates:

  • I've seen https://github.com/topfunky/osxscreenshot The problem is that it requires an older version of Ruby (1.8.x) and will only work on my dev Mac machine.

  • I've seen the vulnerability with Wordpress (they have a service that doesn't do any rate limiting which someone could potentially abuse). I would not want to abuse their resources for my benefit... http://s.wordpress.com/mshots/v1/http%3A%2F%2Fstackoverflow.com%2F?w=500

  • The cropping will be easy with http://rmagick.rubyforge.org/ or https://github.com/thoughtbot/paperclip

like image 967
user1049097 Avatar asked Nov 21 '11 21:11

user1049097


1 Answers

There is a Rails gem for this task.

 gem install selenium-webdriver

Simple use case:

require 'selenium-webdriver'
 width = 1024
 height = 728
 driver = Selenium::WebDriver.for :firefox
 driver.navigate.to 'http://domain.com'
 driver.execute_script %Q{
   window.resizeTo(#{width}, #{height});
 }
 driver.save_screenshot('/tmp/screenshot.png')
 driver.quit
like image 197
Cninroh Avatar answered Sep 20 '22 14:09

Cninroh