class Scraypa::VisitCapybaraHeadlessChromium

Public Class Methods

new(params={}) click to toggle source
Calls superclass method
# File lib/scraypa/visit/visit_capabara_headless_chromium.rb, line 5
def initialize params={}
  super(params)
  @config = params[:config]
  @driver_resetter = params[:driver_resetter]
  @user_agent_retriever = params[:user_agent_retriever]
  reset_and_setup_driver
end

Public Instance Methods

execute(params={}) click to toggle source
# File lib/scraypa/visit/visit_capabara_headless_chromium.rb, line 13
def execute params={}
  visit_get_response params
end

Private Instance Methods

build_driver_options_from_config() click to toggle source
# File lib/scraypa/visit/visit_capabara_headless_chromium.rb, line 94
def build_driver_options_from_config
  driver_options = {browser: @config.headless_chromium[:browser] || :chrome}
  if @config.headless_chromium[:chromeOptions] || @current_user_agent
    driver_options[:desired_capabilities] =
        Selenium::WebDriver::Remote::Capabilities.chrome(
            :chromeOptions =>
                merge_user_agent_with_chrome_options
        )
  end
  driver_options[:args] = @config.headless_chromium[:args] if
      @config.headless_chromium[:args]
  driver_options
end
clear_capybara_session_pool() click to toggle source
# File lib/scraypa/visit/visit_capabara_headless_chromium.rb, line 66
def clear_capybara_session_pool
  Capybara.reset_sessions!
  Capybara.send(:session_pool).each do |session_name, session|
    session.driver.quit if session_name.include?('headless_chromium')
  end
  Capybara.send(:session_pool).delete_if{true}
end
driver_name_from_config() click to toggle source
# File lib/scraypa/visit/visit_capabara_headless_chromium.rb, line 87
def driver_name_from_config
  (@config.driver.to_s +
      (@config.tor ? "tor#{@config.tor_options[:tor_port]}" : "") +
      (@current_user_agent ?
          "ua#{@user_agents.index(@current_user_agent)}" : "")).to_sym
end
merge_user_agent_with_chrome_options() click to toggle source
# File lib/scraypa/visit/visit_capabara_headless_chromium.rb, line 108
def merge_user_agent_with_chrome_options
  chrome_options =
      @config.headless_chromium[:chromeOptions] || {args: []}
  if @current_user_agent &&
      (chrome_options[:args] || chrome_options['args'])
    args_key = chrome_options[:args] ? :args : 'args'
    chrome_options[args_key].delete_if {|d| d.include?("user-agent=")}
    chrome_options[args_key] << "--user-agent=#{@current_user_agent}"
  end
  chrome_options
end
reset_and_setup_driver() click to toggle source
# File lib/scraypa/visit/visit_capabara_headless_chromium.rb, line 42
def reset_and_setup_driver
  case @config.driver
    when :headless_chromium
      reset_headless_chromium_drivers
      update_user_agent_if_changed
      setup_headless_chromium_driver
    when :selenium_chrome_billy
      setup_billy_driver
    else
      raise CapybaraDriverUnsupported,
            "Currently no support for capybara driver: #{@config.driver}"
  end
end
reset_headless_chromium_drivers() click to toggle source
# File lib/scraypa/visit/visit_capabara_headless_chromium.rb, line 56
def reset_headless_chromium_drivers
  clear_capybara_session_pool
  Capybara.drivers.delete_if{|k,v|
    ![:poltergeist_billy,
      :selenium_chrome_billy].include?(k)
  }
  @current_user_agent = nil
  @user_agents = []
end
setup_billy_driver() click to toggle source
# File lib/scraypa/visit/visit_capabara_headless_chromium.rb, line 74
def setup_billy_driver
  Capybara.javascript_driver = @config.driver
end
setup_headless_chromium_driver() click to toggle source
# File lib/scraypa/visit/visit_capabara_headless_chromium.rb, line 78
def setup_headless_chromium_driver
  driver_name = driver_name_from_config
  Capybara.register_driver driver_name do |app|
    Capybara::Selenium::Driver.new(app,
                                   build_driver_options_from_config)
  end unless Capybara.drivers.keys.include? driver_name
  Capybara.default_driver = driver_name
end
update_user_agent_and_setup_driver(new_user_agent) click to toggle source
# File lib/scraypa/visit/visit_capabara_headless_chromium.rb, line 35
def update_user_agent_and_setup_driver new_user_agent
  @current_user_agent = new_user_agent
  @user_agents << @current_user_agent unless
      @user_agents.include? @current_user_agent
  setup_headless_chromium_driver
end
update_user_agent_if_changed() click to toggle source
# File lib/scraypa/visit/visit_capabara_headless_chromium.rb, line 27
def update_user_agent_if_changed
  if @user_agent_retriever
    new_user_agent = @user_agent_retriever.user_agent
    update_user_agent_and_setup_driver new_user_agent if
        @current_user_agent != new_user_agent
  end
end
visit_get_response(params={}) click to toggle source
# File lib/scraypa/visit/visit_capabara_headless_chromium.rb, line 19
def visit_get_response params={}
  update_user_agent_if_changed if @has_visited
  @has_visited = true
  Capybara.visit params[:url]
  @driver_resetter.reset_if_nth_request if @driver_resetter
  Capybara.page
end