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