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