lib/browsed/firefox.rb in browsed-0.2.5 vs lib/browsed/firefox.rb in browsed-0.2.6

- old
+ new

@@ -3,11 +3,10 @@ private def register_firefox_driver(options: {}) open_timeout = options.fetch(:open_timeout, 60) read_timeout = options.fetch(:read_timeout, 60) - browser_id = options.fetch(:browser_id, nil) download_path = options.fetch(:download_path, self.configuration.download_path) private_browsing = options.fetch(:private_browsing, false) profile = Selenium::WebDriver::Firefox::Profile.new @@ -26,38 +25,40 @@ profile["browser.tabs.warnOnClose"] = false profile["browser.tabs.warnOnCloseOtherTabs"] = false profile["general.useragent.override"] = self.user_agent unless self.user_agent.to_s.empty? - id = SecureRandom.hex[0..15] profile = firefox_proxy_options(profile) options = Selenium::WebDriver::Firefox::Options.new(profile: profile) - options.args << "--browser_id=#{id}" unless browser_id.to_s.empty? + options.args << "--browser_id=#{self.browser_id}" unless self.browser_id.to_s.empty? options.args << "--headless" if headless? Capybara.register_driver self.driver do |app| client = Selenium::WebDriver::Remote::Http::Default.new(open_timeout: open_timeout, read_timeout: read_timeout) Capybara::Selenium::Driver.new(app, browser: :firefox, http_client: client, options: options) end - - return id end def firefox_proxy_options(profile) - if self.proxy && !self.proxy.empty? && self.proxy.has_key?(:host) && self.proxy.has_key?(:port) - proxy_config = Selenium::WebDriver::Proxy.new( - http: "#{self.proxy.fetch(:host)}:#{self.proxy.fetch(:port)}", - ssl: "#{self.proxy.fetch(:host)}:#{self.proxy.fetch(:port)}", - socks: "#{self.proxy.fetch(:host)}:#{self.proxy.fetch(:port)}" - ) - - proxy_config.socks_username = self.proxy.fetch(:username) unless self.proxy.fetch(:username, nil).to_s.empty? - proxy_config.socks_password = self.proxy.fetch(:password) unless self.proxy.fetch(:password, nil).to_s.empty? - - profile.proxy = proxy_config + proxy_options = nil - log("Will use proxy #{self.proxy.fetch(:host)}:#{self.proxy.fetch(:port)} to initiate the request.") + if valid_proxy? + if self.proxy.fetch(:mode, nil).eql?(:proxy_chain) && proxy_using_auth? + log("Starting a new proxy chain server instance.") + self.proxy_chain_server = Browsed::Proxies::ProxyChain.new(self.browser_id) + + generated_proxy_url = self.proxy_chain_server.start_server(generate_proxy_auth_url) + + log("Started a new proxy chain server instance at #{generated_proxy_url}.") + + uri = URI.parse(generated_proxy_url) + proxy_options = generate_selenium_webdriver_proxy(host: uri.host, port: uri.port) + else + proxy_options = generate_selenium_webdriver_proxy(host: self.proxy.fetch(:host), port: self.proxy.fetch(:port)) + end end + + profile.proxy = proxy_options unless proxy_options.nil? return profile end end