Need help with webshot?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

vitalie
211 Stars 70 Forks MIT License 94 Commits 19 Opened issues

Description

Captures a web page as a screenshot.

Services available

!
?

Need anything else?

Contributors list

# 236,558
Ruby
saas
paas
JavaScr...
61 commits
# 36,505
PHP
cakephp...
JavaScr...
mvc-fra...
4 commits
# 572,032
Ruby
4 commits
# 399,409
Ruby
Shell
devops
ssh
3 commits
# 180,802
Ruby
nokogir...
gosu
Shell
3 commits
# 623,606
Ruby
2 commits
# 89,749
Swift
instagr...
carthag...
cocoapo...
1 commit
# 172,459
Ruby
Elixir
session...
R
1 commit
# 158,820
JavaScr...
HTML
osx
travis-...
1 commit
# 85,002
TeX
Less
Shell
gcs
1 commit
# 303,765
Rails
HTML
transpi...
Go
1 commit

Webshot

Captures a web page as a screenshot using Poltergeist, Capybara and PhantomJS.

  • Build Status

Installation

Download and install PhantomJS version 2.X, add the directory containing the binary to your PATH.

Add the

webshot
gem to your Gemfile:
gem "webshot"

And then execute:

$ bundle

Or install it yourself as:

$ gem install webshot

Usage

# Setup Capybara
ws = Webshot::Screenshot.instance

Capture Google's home page

ws.capture "http://www.google.com/", "google.png"

Customize thumbnail

ws.capture "http://www.google.com/", "google.png", width: 100, height: 90, quality: 85

Specify only width, height will be computed according to page's height

ws.capture "http://www.google.com/", "google.png", width: 1024

Specify an array of additional HTTP status codes to accept,

beyond normal success codes like 200 or 302

ws.capture "http://www.google.com/foo", "google_404.png", allowed_status_codes: [404]

Customize thumbnail generation (MiniMagick)

see: https://github.com/minimagick/minimagick

ws.capture("http://www.google.com/", "google.png") do |magick| magick.combine_options do |c| c.thumbnail "100x" c.background "white" c.extent "100x90" c.gravity "north" c.quality 85 end end

You can wait some time after visit page before capturing screenshot.

# Timeout in seconds
ws.capture 'http://www.google.com/', 'google.png', timeout: 2

You can login before capturing screenshot.

ws.start_session do
  visit 'https://github.com/login'
  fill_in 'Username or Email', :with => '[email protected]'
  fill_in 'Password', :with => 'password'
  click_button 'Sign in'
end.capture 'https://github.com/username/', 'github.png'

Scaling

It's not recommended to start multiple PhantomJS concurrently. You should serialize requests, treat the process as unreliable and monitor it with daemontools, god, monit, etc.

Recommended setup:

 [S3]  [Queue] 

The application triggers screenshot requests which are queued and then processed by a background worker (Resque, Sidekiq, etc). The worker uploads the images to S3 which are served through CloudFront. The CDN should be configured to serve a default image (404 handler) with a low TTL to handle screenshot are not yet ready or couldn't be generated.

Notes: - sed 's/S3/Your file hosting service/g' - sed 's/CloudFront/Your CDN service/g'

Contributing

  1. Fork it
  2. Create your feature branch (
    git checkout -b my-new-feature
    )
  3. Commit your changes (
    git commit -am 'Add some feature'
    )
  4. Push to the branch (
    git push origin my-new-feature
    )
  5. Create new Pull Request

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.