Skip to content

Instantly share code, notes, and snippets.

@watzon
Last active June 24, 2020 03:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save watzon/3700e3663255148bd347610a5b120fa7 to your computer and use it in GitHub Desktop.
Save watzon/3700e3663255148bd347610a5b120fa7 to your computer and use it in GitHub Desktop.
require "pool/connection"
require "marionette"
require "kemal"
require "ngrok"
include Marionette
firefox_options = Marionette.firefox_options(args: ["-headless"])
driver_pool = ConnectionPool.new(capacity: 5, initial: 1) do
session = WebDriver.create_session(:firefox, options: firefox_options)
session.page_load_timeout(10.seconds)
session
end
get "/screenshot" do |env|
url = env.params.query["url"]
full_screen = env.params.query.fetch("full_screen", "false")
full_screen = JSON.parse(full_screen).as_bool? || false
driver_pool.use do |session|
begin
session.navigate(url)
data = full_screen ? session.full_page_screenshot : session.take_screenshot
send_file env, Base64.decode(data), "image/png"
rescue ex
env.response.content_type = "application/json"
case ex
when Error::ReachedErrorPage
{"error" => 1, "message" => "page does not exist"}.to_json
when Error::Timeout
{"error" => 2, "message" => "timed out while trying to load page"}.to_json
else
{"error" => 0, "message" => ex.message}.to_json
end
end
end
end
Ngrok.start({addr: "127.0.0.1:3000"}) do |ngrok|
puts ngrok.ngrok_url
puts ngrok.ngrok_url_https
Kemal.run
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment