class Ritsudo::Driver

Public Class Methods

new(logger_level: :warn, timeout: 60, wait_time: 5, logger_output: "./ritsudo.selenium.log", user_agent: nil, cookies: nil, args: ['--headless', '--window-size=1920,1080', '--ignore-certificate-errors', '--disable-popup-blocking', '--disable-translate', '--blink-settings=imagesEnabled=false']) click to toggle source
# File lib/ritsudo/driver.rb, line 14
def initialize(logger_level: :warn, timeout: 60, wait_time: 5,
               logger_output: "./ritsudo.selenium.log",
               user_agent: nil,
               cookies: nil,
               args: ['--headless',
                      '--window-size=1920,1080',
                      '--ignore-certificate-errors',
                      '--disable-popup-blocking',
                      '--disable-translate',
                      '--blink-settings=imagesEnabled=false'])

  if user_agent
    args << "--user-agent=#{user_agent}"
  end

  if cookies
    @cookie_templates = WEBrick::Cookie.parse(cookies).map do |cookie|
      { name: cookie.name, value: cookie.value, path: '/' }
    end
  end

  Selenium::WebDriver.logger.output = logger_output
  Selenium::WebDriver.logger.level = logger_level
  client = Selenium::WebDriver::Remote::Http::Default.new.tap { |c| c.read_timeout = timeout }
  driver_options = { options: options(args), desired_capabilities: caps, http_client: client }
  @driver = Selenium::WebDriver.for(:chrome, driver_options).tap do |d|
    d.manage.timeouts.implicit_wait = timeout
  end
  #@wait = Selenium::WebDriver::Wait.new(timeout: wait_time)
end

Public Instance Methods

driver() click to toggle source
# File lib/ritsudo/driver.rb, line 10
def driver
  @driver
end
get(url) click to toggle source
# File lib/ritsudo/driver.rb, line 45
def get(url)
  if @cookie_templates
    u = URI.parse(url)
    base_url = u.to_s.sub(u.request_uri, '/')
    @driver.get(base_url)
    @driver.execute_script("return window.stop");
    sleep(1)
    @driver.manage.logs.get('performance')
    @cookie_templates&.each do |cookie|
      manage.add_cookie(cookie.merge(domain: URI.parse(url).host))
    end
  end
  @driver.get(url)
end

Private Instance Methods

caps() click to toggle source
# File lib/ritsudo/driver.rb, line 60
def caps
  Selenium::WebDriver::Remote::Capabilities.chrome(
    loggingPrefs: { performance: 'ALL' },
    chromeOptions: {
      perfLoggingPrefs: {
        enableNetwork: true
      }
    }
  )
end
options(args) click to toggle source
# File lib/ritsudo/driver.rb, line 72
def options(args)
  Selenium::WebDriver::Chrome::Options.new(args: args)
end