class Browsed::Client
Attributes
browser[RW]
browser_id[RW]
configuration[RW]
device[RW]
driver[RW]
environment[RW]
headless[RW]
manager[RW]
maximum_processes[RW]
proxy[RW]
proxy_chain_server[RW]
resolution[RW]
session[RW]
user_agent[RW]
Public Class Methods
new(configuration: ::Browsed.configuration, driver: :selenium_chrome, browser: :chrome, headless: false, device: :desktop, proxy: nil, user_agent: nil, resolution: nil, environment: :production, options: {}, maximum_processes: nil)
click to toggle source
# File lib/browsed/client.rb, line 11 def initialize(configuration: ::Browsed.configuration, driver: :selenium_chrome, browser: :chrome, headless: false, device: :desktop, proxy: nil, user_agent: nil, resolution: nil, environment: :production, options: {}, maximum_processes: nil) self.configuration = configuration self.headless = headless self.environment = environment || self.configuration.environment self.device = device self.proxy = proxy self.proxy_chain_server = nil self.manager = ::Browsed::Manager.new(browser: self.browser) self.maximum_processes = maximum_processes || self.configuration.maximum_processes set_browser(browser) set_driver set_user_agent(user_agent) set_resolution(resolution) options.merge!(browser_id: self.browser_id) setup_capybara(options: options) end
Public Instance Methods
can_start_new_process?()
click to toggle source
# File lib/browsed/client.rb, line 85 def can_start_new_process? self.maximum_processes.nil? || self.manager.can_start_more_processes?(max_count: self.maximum_processes) end
display_screenshot!(path)
click to toggle source
# File lib/browsed/client.rb, line 89 def display_screenshot!(path) Launchy.open path if development? end
quit!(retries: 3)
click to toggle source
# File lib/browsed/client.rb, line 97 def quit!(retries: 3) begin reset_session! self.session.driver.quit rescue Exception retries -= 1 retry if retries > 0 end # If Selenium/Phantom somehow isn't able to shut down the browser, force a shutdown using kill -9 self.manager.set_command(browser_id: self.browser_id) self.manager.kill_processes! if self.proxy_chain_server self.proxy_chain_server.stop self.proxy_chain_server = nil end self.session = nil end
reset_session!()
click to toggle source
# File lib/browsed/client.rb, line 93 def reset_session! self.session.reset_session! rescue nil end
set_browser(browser)
click to toggle source
# File lib/browsed/client.rb, line 61 def set_browser(browser) self.browser = (browser || self.configuration.browser)&.to_sym self.browser_id = generate_browser_id raise ::Browsed::InvalidBrowserError unless ::Browsed::Constants::BROWSERS.include?(self.browser) end
set_driver()
click to toggle source
# File lib/browsed/client.rb, line 50 def set_driver self.driver = case self.browser.to_sym when :chrome self.headless ? :selenium_chrome_headless : :selenium_chrome when :firefox :selenium when :phantomjs :poltergeist end end
setup_capybara(options: {}, retries: 3)
click to toggle source
# File lib/browsed/client.rb, line 68 def setup_capybara(options: {}, retries: 3) self.manager.kill_stale_processes! if can_start_new_process? register_driver!(options) Capybara.default_driver = self.driver Capybara.javascript_driver = self.driver Capybara.default_max_wait_time = options.fetch(:wait_time, 5) #seconds self.session = Capybara::Session.new(self.driver) else raise Browsed::TooManyProcessesError, "Too many #{self.browser} processes running, reached maximum allowed number of #{self.maximum_processes} processes." end end
Private Instance Methods
chrome?()
click to toggle source
# File lib/browsed/client.rb, line 137 def chrome? self.browser.to_sym.eql?(:chrome) end
development?()
click to toggle source
# File lib/browsed/client.rb, line 141 def development? in_environment?(:development) end
firefox?()
click to toggle source
# File lib/browsed/client.rb, line 133 def firefox? self.browser.to_sym.eql?(:firefox) end
headless?()
click to toggle source
# File lib/browsed/client.rb, line 149 def headless? self.headless end
in_environment?(env)
click to toggle source
# File lib/browsed/client.rb, line 145 def in_environment?(env) self.environment.eql?(env) end
log(message)
click to toggle source
# File lib/browsed/client.rb, line 153 def log(message) puts "[Browsed::Client] - #{Time.now}: #{message}" if self.configuration.verbose? end
phantomjs?()
click to toggle source
# File lib/browsed/client.rb, line 129 def phantomjs? self.browser.to_sym.eql?(:phantomjs) end
register_driver!(options = {})
click to toggle source
# File lib/browsed/client.rb, line 119 def register_driver!(options = {}) if firefox? register_firefox_driver(options: options) elsif chrome? register_chrome_driver(options: options.merge(resolution: self.resolution)) elsif phantomjs? register_phantomjs_driver(options: options) end end