Class: Browsed::Client
- Inherits:
-
Object
- Object
- Browsed::Client
- Defined in:
- lib/browsed/client.rb
Instance Attribute Summary collapse
-
#browser ⇒ Object
Returns the value of attribute browser.
-
#browser_id ⇒ Object
Returns the value of attribute browser_id.
-
#configuration ⇒ Object
Returns the value of attribute configuration.
-
#device ⇒ Object
Returns the value of attribute device.
-
#driver ⇒ Object
Returns the value of attribute driver.
-
#environment ⇒ Object
Returns the value of attribute environment.
-
#headless ⇒ Object
Returns the value of attribute headless.
-
#manager ⇒ Object
Returns the value of attribute manager.
-
#maximum_processes ⇒ Object
Returns the value of attribute maximum_processes.
-
#proxy ⇒ Object
Returns the value of attribute proxy.
-
#proxy_chain_server ⇒ Object
Returns the value of attribute proxy_chain_server.
-
#resolution ⇒ Object
Returns the value of attribute resolution.
-
#session ⇒ Object
Returns the value of attribute session.
-
#user_agent ⇒ Object
Returns the value of attribute user_agent.
Instance Method Summary collapse
- #can_start_new_process? ⇒ Boolean
- #display_screenshot!(path) ⇒ Object
-
#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) ⇒ Client
constructor
A new instance of Client.
- #quit!(retries: 3) ⇒ Object
- #reset_session! ⇒ Object
- #set_browser(browser) ⇒ Object
- #set_driver ⇒ Object
- #setup_capybara(options: {}, retries: 3) ⇒ Object
Methods included from Proxies
#generate_proxy_auth_url, #generate_selenium_webdriver_proxy, #proxy_using_auth?, #valid_proxy?
Methods included from Browser
#generate_browser_id, #is_ipad?, #is_iphone?, #randomize_ios_resolution, #randomize_resolution, #resizable_browser?, #resize!, #runs_ios?, #set_resolution, #set_user_agent
Constructor Details
#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) ⇒ Client
Returns a new instance of Client.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# 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) .merge!(browser_id: self.browser_id) (options: ) end |
Instance Attribute Details
#browser ⇒ Object
Returns the value of attribute browser.
4 5 6 |
# File 'lib/browsed/client.rb', line 4 def browser @browser end |
#browser_id ⇒ Object
Returns the value of attribute browser_id.
4 5 6 |
# File 'lib/browsed/client.rb', line 4 def browser_id @browser_id end |
#configuration ⇒ Object
Returns the value of attribute configuration.
3 4 5 |
# File 'lib/browsed/client.rb', line 3 def configuration @configuration end |
#device ⇒ Object
Returns the value of attribute device.
6 7 8 |
# File 'lib/browsed/client.rb', line 6 def device @device end |
#driver ⇒ Object
Returns the value of attribute driver.
4 5 6 |
# File 'lib/browsed/client.rb', line 4 def driver @driver end |
#environment ⇒ Object
Returns the value of attribute environment.
4 5 6 |
# File 'lib/browsed/client.rb', line 4 def environment @environment end |
#headless ⇒ Object
Returns the value of attribute headless.
4 5 6 |
# File 'lib/browsed/client.rb', line 4 def headless @headless end |
#manager ⇒ Object
Returns the value of attribute manager.
7 8 9 |
# File 'lib/browsed/client.rb', line 7 def manager @manager end |
#maximum_processes ⇒ Object
Returns the value of attribute maximum_processes.
7 8 9 |
# File 'lib/browsed/client.rb', line 7 def maximum_processes @maximum_processes end |
#proxy ⇒ Object
Returns the value of attribute proxy.
5 6 7 |
# File 'lib/browsed/client.rb', line 5 def proxy @proxy end |
#proxy_chain_server ⇒ Object
Returns the value of attribute proxy_chain_server.
5 6 7 |
# File 'lib/browsed/client.rb', line 5 def proxy_chain_server @proxy_chain_server end |
#resolution ⇒ Object
Returns the value of attribute resolution.
6 7 8 |
# File 'lib/browsed/client.rb', line 6 def resolution @resolution end |
#session ⇒ Object
Returns the value of attribute session.
5 6 7 |
# File 'lib/browsed/client.rb', line 5 def session @session end |
#user_agent ⇒ Object
Returns the value of attribute user_agent.
6 7 8 |
# File 'lib/browsed/client.rb', line 6 def user_agent @user_agent end |
Instance Method Details
#can_start_new_process? ⇒ Boolean
85 86 87 |
# 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) ⇒ Object
89 90 91 |
# File 'lib/browsed/client.rb', line 89 def display_screenshot!(path) Launchy.open path if development? end |
#quit!(retries: 3) ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# 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! ⇒ Object
93 94 95 |
# File 'lib/browsed/client.rb', line 93 def reset_session! self.session.reset_session! rescue nil end |
#set_browser(browser) ⇒ Object
61 62 63 64 65 66 |
# 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 ⇒ Object
50 51 52 53 54 55 56 57 58 59 |
# 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) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/browsed/client.rb', line 68 def (options: {}, retries: 3) self.manager.kill_stale_processes! if can_start_new_process? register_driver!() Capybara.default_driver = self.driver Capybara.javascript_driver = self.driver Capybara.default_max_wait_time = .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 |