class WatchDoge::Worker
Public Class Methods
new(uid, options)
click to toggle source
options:
1. width: browser's width, default to 1280 2. height: browser's height, default to 768 3. http_client: instance of Selenium::WebDriver::Remote::Http 4. all acceptable arguments of Watir::Browser class
# File lib/watchdoge/worker.rb, line 23 def initialize uid, options @http = Selenium::WebDriver::Remote::Http::Default.new # HTTP timeout default to 120 sec @http.read_timeout = options.delete(:timeout) @browser = options[:browser] @uid = uid options = { # Selenium HTTP configuration http_client: @http }.merge(options).merge(default_browser_profile) # intall required version driver WatchDoge::WebdriverManager.new @browser @core = WatchDoge.configuration.engine.new @browser, options # for generate uri hash @landed_page = nil # autosaving cookies while worker closed @cookie_autosave = false # flag for cookies loaded @cookie_loaded = false # width/height @width = options[:width] @height = options[:height] @core.window.resize_to @width, @height end
Public Instance Methods
close()
click to toggle source
# File lib/watchdoge/worker.rb, line 63 def close save_cookie @core.close end
fullpage_screenshot(**kwargs)
click to toggle source
# File lib/watchdoge/worker.rb, line 57 def fullpage_screenshot **kwargs resize_by_viewport(kwargs) do |resize| return resize.screenshot end end
goto(uri)
click to toggle source
# File lib/watchdoge/worker.rb, line 68 def goto uri @core.goto uri @landed_page = uri load_cookie unless cookie_loaded? @core.refresh end
resize_by_viewport(**kwargs) { |core| ... }
click to toggle source
# File lib/watchdoge/worker.rb, line 78 def resize_by_viewport **kwargs width = (kwargs.delete :width) || @core.body.width height = (kwargs.delete :height) || @core.body.height # TODO: improve "wait" logic sleep_sec = kwargs.delete :wait # has element selector unless kwargs.empty? sleep 0.5 target = @core.element(kwargs) width = [target.width, @core.body.width].max height = [target.height, @core.body.height].max end @core.window.resize_to [width, 5000].min, [height, 15000].min # TODO: improve "wait" logic puts " -> wait rendering #{sleep_sec} sec" if sleep_sec sleep sleep_sec.to_i yield(@core) @core.window.resize_to @width, @height end
Private Instance Methods
default_browser_profile()
click to toggle source
# File lib/watchdoge/worker.rb, line 105 def default_browser_profile case @browser when :chrome prefs = {} { options: { prefs: prefs } } when :firefox profile = Selenium::WebDriver::Firefox::Profile.new # basically, firefox default sanbox level to 4, which denied access to most folders # that broken many env config such as FONTCONFIG_PATH profile['security.sandbox.content.level'] = 2 { profile: profile } end end
method_missing(method_name, *args)
click to toggle source
try delegate all missing methods to selenium
# File lib/watchdoge/worker.rb, line 147 def method_missing(method_name, *args) result = @core.__send__(method_name, *args) result end