Class: Kleya::Browser

Inherits:
Object
  • Object
show all
Defined in:
lib/kleya/browser.rb

Instance Method Summary collapse

Constructor Details

#initialize(**options) ⇒ Browser

Returns a new instance of Browser.

Options Hash (**options):

  • :viewport (Symbol) — default: :desktop

    the viewport to use

  • :width (Integer) — default: 1920

    the width of the viewport

  • :height (Integer) — default: 1080

    the height of the viewport

  • :headless (Boolean) — default: true

    whether to run the browser in headless mode

  • :timeout (Integer) — default: 60

    the timeout for the browser to navigate to the URL



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/kleya/browser.rb', line 9

def initialize(**options)
  if options[:width] || options[:height]
    @viewport = Viewport.new(
      width: options[:width] || Preset::DESKTOP.width,
      height: options[:height] || Preset::DESKTOP.height
    )
  elsif options[:preset]
    if Preset.const_defined?(options[:preset].to_s.upcase)
      @viewport = Preset.const_get(options[:preset].to_s.upcase)
    else
      raise ArgumentError, "Preset #{options[:preset]} not found"
    end
  else
    @viewport = Preset::DESKTOP
  end

  @options = options
end

Instance Method Details

#capture(url, options = {}) ⇒ Artifact

Returns the screenshot artifact.

Examples:

Taking a X-optimized screenshot

browser = Kleya::Browser.new(
  width: Kleya::Preset::X.width,
  height: Kleya::Preset::X.height
)
screenshot = browser.capture('https://example.com')

Options Hash (options):

  • :format (Symbol) — default: :jpeg

    image format (:jpeg, :png)

  • :quality (Integer) — default: 90

    JPEG quality (1-100)

  • :encoding (Symbol) — default: :base64

    output encoding

  • :area (Symbol) — default: :viewport

    the area to capture (:viewport, :page)



41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/kleya/browser.rb', line 41

def capture(url, options = {})
  browser.goto(url)

  format = options[:format] || :jpeg
  quality = options[:quality] || 90
  encoding = options[:encoding] || :base64
  full = options[:area] == :page

  data = browser.screenshot(format:, quality:, encoding:, full:)

  Artifact.new(data:, url:, viewport: @viewport, format:, quality:, encoding:)
rescue Ferrum::TimeoutError
  raise TimeoutError, 'Browser timed out'
end

#quitvoid



57
58
59
60
# File 'lib/kleya/browser.rb', line 57

def quit
  @browser&.quit
  @browser = nil
end