Class: BlackStack::PampaBrowser
- Inherits:
-
Watir::Browser
- Object
- Watir::Browser
- BlackStack::PampaBrowser
- Defined in:
- lib/browserfactory.rb
Instance Attribute Summary collapse
-
#agent_name ⇒ Object
TODO: enable this when you move to the “frequency-based-streaming” model PAMPA_BROWSER_CHANNEL_LOCK_FILENAME = ‘./browserfactory.channel.%PRFILE_NAME%.lock’ # manejo de concurrencia en la creación de browsers attr_accessor :lockfile.
-
#lnuser ⇒ Object
TODO: enable this when you move to the “frequency-based-streaming” model PAMPA_BROWSER_CHANNEL_LOCK_FILENAME = ‘./browserfactory.channel.%PRFILE_NAME%.lock’ # manejo de concurrencia en la creación de browsers attr_accessor :lockfile.
-
#profile_name ⇒ Object
TODO: enable this when you move to the “frequency-based-streaming” model PAMPA_BROWSER_CHANNEL_LOCK_FILENAME = ‘./browserfactory.channel.%PRFILE_NAME%.lock’ # manejo de concurrencia en la creación de browsers attr_accessor :lockfile.
-
#proxy ⇒ Object
TODO: enable this when you move to the “frequency-based-streaming” model PAMPA_BROWSER_CHANNEL_LOCK_FILENAME = ‘./browserfactory.channel.%PRFILE_NAME%.lock’ # manejo de concurrencia en la creación de browsers attr_accessor :lockfile.
Instance Method Summary collapse
- #back ⇒ Object
- #execute_script(script, *args) ⇒ Object
- #forward ⇒ Object
- #goto(url) ⇒ Object
-
#initialize(driver) ⇒ PampaBrowser
constructor
A new instance of PampaBrowser.
- #inspect ⇒ Object
- #lock_channel ⇒ Object
-
#notify(method) ⇒ Object
def initialize.
- #push_screenshot(filename = nil) ⇒ Object
- #refresh ⇒ Object
- #release_channel ⇒ Object
- #reset! ⇒ Object
- #screenshot ⇒ Object
- #send_keys(*args) ⇒ Object
- #text ⇒ Object
- #title ⇒ Object
- #url ⇒ Object
- #wait(timeout = 5) ⇒ Object
Constructor Details
#initialize(driver) ⇒ PampaBrowser
Returns a new instance of PampaBrowser.
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/browserfactory.rb', line 62 def initialize(driver) # TODO: enable this when you move to the "frequency-based-streaming" model #fname = PAMPA_BROWSER_CHANNEL_LOCK_FILENAME.gsub('%PRFILE_NAME%', self.profile_name.to_s) #self.lockfile = File.open(fname,"w") # super(driver) # TODO: enable this when you move to the "frequency-based-streaming" model =begin # Can't operate the same browser from more than 1 thread. # More information here: # https://stackoverflow.com/questions/28093347/is-selenium-webdriver-thread-safe # # https://bibwild.wordpress.com/2015/01/15/ruby-threads-gotcha-with-local-vars-and-shared-state/ # https://stackoverflow.com/questions/55895952/ruby-how-do-i-share-a-global-variable-amongst-threads-that-are-running-an-objec # t0 = Thread.new { minimum_enlapsed_seconds = 5.to_f while true start_time = Time.now t1 = Thread.new(self) do |t_browser| #while true begin self.lock_channel sleep(1) # para esperar a que se ejecute la sentencia t1.join debajo t_browser.push_screenshot self.release_channel rescue => e # Communication with the chrome driver errors may occur. # If an exception happens here and it is not catched, then # then the thread will stop workng and the streaming will # stop. end #end # while true end # Thread.new t1.join end_time = Time.now elapsed_seconds = (end_time - start_time).to_f if (elapsed_seconds < minimum_enlapsed_seconds) sleep_seconds = minimum_enlapsed_seconds - elapsed_seconds sleep(sleep_seconds.to_i + 1) end # if end # while true } # Thread.new =end end |
Instance Attribute Details
#agent_name ⇒ Object
TODO: enable this when you move to the “frequency-based-streaming” model PAMPA_BROWSER_CHANNEL_LOCK_FILENAME = ‘./browserfactory.channel.%PRFILE_NAME%.lock’ # manejo de concurrencia en la creación de browsers attr_accessor :lockfile
52 53 54 |
# File 'lib/browserfactory.rb', line 52 def agent_name @agent_name end |
#lnuser ⇒ Object
TODO: enable this when you move to the “frequency-based-streaming” model PAMPA_BROWSER_CHANNEL_LOCK_FILENAME = ‘./browserfactory.channel.%PRFILE_NAME%.lock’ # manejo de concurrencia en la creación de browsers attr_accessor :lockfile
52 53 54 |
# File 'lib/browserfactory.rb', line 52 def lnuser @lnuser end |
#profile_name ⇒ Object
TODO: enable this when you move to the “frequency-based-streaming” model PAMPA_BROWSER_CHANNEL_LOCK_FILENAME = ‘./browserfactory.channel.%PRFILE_NAME%.lock’ # manejo de concurrencia en la creación de browsers attr_accessor :lockfile
52 53 54 |
# File 'lib/browserfactory.rb', line 52 def profile_name @profile_name end |
#proxy ⇒ Object
TODO: enable this when you move to the “frequency-based-streaming” model PAMPA_BROWSER_CHANNEL_LOCK_FILENAME = ‘./browserfactory.channel.%PRFILE_NAME%.lock’ # manejo de concurrencia en la creación de browsers attr_accessor :lockfile
52 53 54 |
# File 'lib/browserfactory.rb', line 52 def proxy @proxy end |
Instance Method Details
#back ⇒ Object
167 168 169 170 171 |
# File 'lib/browserfactory.rb', line 167 def back self.notify("back") super BlackStack::BrowserFactory.browser.push_screenshot end |
#execute_script(script, *args) ⇒ Object
179 180 181 182 183 |
# File 'lib/browserfactory.rb', line 179 def execute_script(script, *args) self.notify("execute_script") super BlackStack::BrowserFactory.browser.push_screenshot end |
#forward ⇒ Object
173 174 175 176 177 |
# File 'lib/browserfactory.rb', line 173 def forward self.notify("forward") super BlackStack::BrowserFactory.browser.push_screenshot end |
#goto(url) ⇒ Object
185 186 187 188 189 |
# File 'lib/browserfactory.rb', line 185 def goto(url) # self.notify("goto") super # BlackStack::BrowserFactory.browser.push_screenshot end |
#inspect ⇒ Object
209 210 211 212 213 |
# File 'lib/browserfactory.rb', line 209 def inspect self.notify("inspect") super BlackStack::BrowserFactory.browser.push_screenshot end |
#lock_channel ⇒ Object
54 55 56 |
# File 'lib/browserfactory.rb', line 54 def lock_channel() self.lockfile.flock(File::LOCK_EX) end |
#notify(method) ⇒ Object
def initialize
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/browserfactory.rb', line 110 def notify(method) url = "#{BlackStack::Pampa::api_protocol}://#{PROCESS.ws_url}:#{PROCESS.ws_port}/api1.3/pampa/browser/notify.json" res = BlackStack::Netting::call_post(url, { :api_key => BlackStack::Pampa::api_key, :filename => $0, :method => method, :worker_name => PROCESS.fullWorkerName, :id_proxy => self.proxy.nil? ? nil : self.proxy.id, :id_lnuser => self.lnuser.nil? ? nil : self.lnuser.id, :worker_assigned_process => PROCESS.worker.assigned_process, :profile_name => self.profile_name, :agent_name => self.agent_name, }) parsed = JSON.parse(res.body) if parsed['status'] != "success" raise "Error Tracing BrowserActivity: #{parsed['status']}" end end |
#push_screenshot(filename = nil) ⇒ Object
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
# File 'lib/browserfactory.rb', line 129 def push_screenshot(filename=nil) =begin filename = "#{PROCESS.fullWorkerName}.png" if filename.nil? BrowserFactory::screenshot(filename) image = MiniMagick::Image.open(filename) w = (image[:width].to_f * 0.25).to_i h = (image[:height].to_f * 0.25).to_i image.resize "#{w.to_s}x#{h.to_s}" image.format "png" image.write filename url = "#{BlackStack::Pampa::api_protocol}://#{PROCESS.ws_url}:#{PROCESS.ws_port}/api1.3/pampa/browser/screenshot.json" res = RestClient::Request.execute( :api_key => BlackStack::Pampa::api_key, :id_client => PROCESS.id_client, :verify_ssl => false, :url => url, :method => :post, :headers => { :accept => 'application/json', :params => { :api_key => BlackStack::Pampa.api_key, :filename => filename, }, }, :payload => { :file => File.new(filename, "r"), :multipart => false, } ) parsed = JSON.parse(res.body) if parsed['status'] != "success" raise "Error Uploading Screenshot: #{parsed['status']}" end =end end |
#refresh ⇒ Object
203 204 205 206 207 |
# File 'lib/browserfactory.rb', line 203 def refresh self.notify("refresh") super BlackStack::BrowserFactory.browser.push_screenshot end |
#release_channel ⇒ Object
58 59 60 |
# File 'lib/browserfactory.rb', line 58 def release_channel() self.lockfile.flock(File::LOCK_UN) end |
#reset! ⇒ Object
197 198 199 200 201 |
# File 'lib/browserfactory.rb', line 197 def reset! self.notify("reset!") super BlackStack::BrowserFactory.browser.push_screenshot end |
#screenshot ⇒ Object
191 192 193 194 195 |
# File 'lib/browserfactory.rb', line 191 def screenshot self.notify("screenshot") super BlackStack::BrowserFactory.browser.push_screenshot end |
#send_keys(*args) ⇒ Object
215 216 217 218 219 220 |
# File 'lib/browserfactory.rb', line 215 def send_keys(*args) # no se notifica el evento, porque incremente el # de llamadas a la API de 800/hora a 5000/hora, y eso requiere mas infraestructura #self.notify("send_keys") super #BlackStack::BrowserFactory.browser.push_screenshot end |
#text ⇒ Object
222 223 224 225 226 |
# File 'lib/browserfactory.rb', line 222 def text self.notify("text") super BlackStack::BrowserFactory.browser.push_screenshot end |
#title ⇒ Object
228 229 230 231 232 |
# File 'lib/browserfactory.rb', line 228 def title self.notify("title") super BlackStack::BrowserFactory.browser.push_screenshot end |
#url ⇒ Object
234 235 236 237 238 |
# File 'lib/browserfactory.rb', line 234 def url self.notify("url") super BlackStack::BrowserFactory.browser.push_screenshot end |
#wait(timeout = 5) ⇒ Object
240 241 242 243 244 |
# File 'lib/browserfactory.rb', line 240 def wait(timeout = 5) self.notify("wait") super BlackStack::BrowserFactory.browser.push_screenshot end |