Class: XAutoBrowse

Inherits:
Object
  • Object
show all
Defined in:
lib/xautobrowse.rb

Defined Under Namespace

Classes: Window

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(browser = :firefox, new_window: true, debug: false, sps: false, clicks: {}, scan_tabs: !new_window,, context: nil, text_fields: {}) ⇒ XAutoBrowse

Returns a new instance of XAutoBrowse.



135
136
137
138
139
140
141
142
143
144
145
146
147
148
# File 'lib/xautobrowse.rb', line 135

def initialize(browser= :firefox, new_window: true, debug: false, 
               sps: false, clicks: {}, scan_tabs: !new_window, 
               context: nil, text_fields: {})

  @browser, @debug, @sps, @clicks = browser.to_sym, debug, sps, clicks
  @new_window, @context, @text_fields = new_window, context, text_fields
  
  @window = Window.new(browser, new_win: new_window, scan_tabs: scan_tabs)

  sleep 4 if new_window
  
  connect() if sps
  
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *args) ⇒ Object



307
308
309
310
311
# File 'lib/xautobrowse.rb', line 307

def method_missing(method_name, *args)
  if method_name.to_s =~ /^alt/ then
    send_keys method_name
  end
end

Instance Attribute Details

#actionsObject

Returns the value of attribute actions.



129
130
131
# File 'lib/xautobrowse.rb', line 129

def actions
  @actions
end

#contextObject

Returns the value of attribute context.



129
130
131
# File 'lib/xautobrowse.rb', line 129

def context
  @context
end

#windowObject (readonly)

Returns the value of attribute window.



128
129
130
# File 'lib/xautobrowse.rb', line 128

def window
  @window
end

Instance Method Details

#accesskey(key) ⇒ Object Also known as: access_key

custom accesskey (e.g. CTRL+SHIFT+S) typically used to reference an element on the web page



153
# File 'lib/xautobrowse.rb', line 153

def accesskey(key) send_keys(key.to_sym)  end

#attach_console(autohide: true) ⇒ Object

Attaches the SPS client to the web browser. The SPS broker must be started before the code can be attached. see start_broker()



160
161
162
163
164
165
166
167
168
169
170
171
172
# File 'lib/xautobrowse.rb', line 160

def attach_console(autohide: true)
  
  @window.activate()
  open_web_console(); sleep 1

  clipboard = Clipboard.paste    
  Clipboard.copy javascript(); sleep 1
  ctrl_v(); sleep 0.5; carriage_return()
  
  close_web_console() if autohide
  Clipboard.copy clipboard
  
end

#carriage_returnObject Also known as: cr



301
302
303
# File 'lib/xautobrowse.rb', line 301

def carriage_return()
  @window.activate(); sleep 1; XDo::Keyboard.return
end

#click(name) ⇒ Object



174
175
176
177
178
179
180
# File 'lib/xautobrowse.rb', line 174

def click(name)
  
  web_console do |x| 
    x.enter [@context, @clicks[name]].compact.join('.') + '.click();'
  end
  
end

#closeObject Also known as: exit



182
183
184
# File 'lib/xautobrowse.rb', line 182

def close()
  ctrl_w()
end

#close_web_consoleObject Also known as: hide_web_console



188
189
190
191
# File 'lib/xautobrowse.rb', line 188

def close_web_console()
  @window.activate()
  ctrl_shift_i()
end

#connectObject



195
196
197
198
199
# File 'lib/xautobrowse.rb', line 195

def connect()

  start_broker(); sleep 4; connect_controller()
  
end

#connect_controllerObject

Connects to the SPS broker to communicate with the web browser



203
204
205
206
207
# File 'lib/xautobrowse.rb', line 203

def connect_controller()
  
  @udr = UniversalDomRemote.new debug: @debug
  
end

#copy_screenObject Also known as: scrape_screen



209
210
211
212
# File 'lib/xautobrowse.rb', line 209

def copy_screen()
  select_all(); sleep 2; ctrl_c(); sleep 2; unselect_all()
  Clipboard.paste    
end

#copy_sourceObject



216
217
218
219
220
221
222
223
224
# File 'lib/xautobrowse.rb', line 216

def copy_source()
  
  view_source(); sleep 3
  select_all(); sleep 1
  ctrl_c() # copy the source code to the clipboard
  sleep 1
  ctrl_w() # close the viewsource window
  
end

#ctrl_aObject

select all



228
# File 'lib/xautobrowse.rb', line 228

def ctrl_a() send_keys(:ctrl_a)  end

#ctrl_cObject

copy



242
# File 'lib/xautobrowse.rb', line 242

def ctrl_c() send_keys(:ctrl_c)  end

#ctrl_lObject

jump to the location bar



246
# File 'lib/xautobrowse.rb', line 246

def ctrl_l() send_keys(:ctrl_l)  end

#ctrl_shift_aObject

unselect all



232
233
234
235
236
237
238
# File 'lib/xautobrowse.rb', line 232

def ctrl_shift_a()

  XDo::Keyboard.key_down('shift')
  send_keys(:ctrl_a)
  XDo::Keyboard.key_up('shift')    

end

#ctrl_shift_iObject

Chromium developer tools



262
# File 'lib/xautobrowse.rb', line 262

def ctrl_shift_i() send_keys(:ctrl_shift_i) end

#ctrl_shift_kObject

Firefox developer tools



266
# File 'lib/xautobrowse.rb', line 266

def ctrl_shift_k() send_keys(:ctrl_shift_k) end

#ctrl_uObject

view source code



250
# File 'lib/xautobrowse.rb', line 250

def ctrl_u() send_keys(:ctrl_u)  end

#ctrl_vObject

paste



254
# File 'lib/xautobrowse.rb', line 254

def ctrl_v() send_keys(:ctrl_v)  end

#ctrl_wObject

close the current window



258
# File 'lib/xautobrowse.rb', line 258

def ctrl_w() send_keys(:ctrl_w)  end

#enter(s = nil) ⇒ Object

input some text



471
472
473
474
475
476
477
478
479
480
481
# File 'lib/xautobrowse.rb', line 471

def enter(s=nil)
  
  if s then
    type(s)
    sleep 0.8
  end
  
  carriage_return()
  sleep 1
  
end

#goObject

submit a form by pressing return



270
271
272
273
274
275
276
277
278
# File 'lib/xautobrowse.rb', line 270

def go()
  
  if block_given? then
    
    @window.activate(); sleep 1; yield(self); carriage_return()
    
  end
  
end

#goto(url, attachconsole: true, new_tab: !@new_window)) ⇒ Object



280
281
282
283
284
285
286
287
288
289
# File 'lib/xautobrowse.rb', line 280

def goto(url, attachconsole: true, new_tab: !@new_window)
  
  new_tab() if new_tab
  sleep 1; ctrl_l()
  sleep 2 if @new_window
  enter(url)
  sleep 5 if @new_window
  attach_console() if @sps and attachconsole

end

#goto_tab(s, url = nil) ⇒ Object



291
292
293
294
295
296
297
298
299
# File 'lib/xautobrowse.rb', line 291

def goto_tab(s, url=nil)
  
  if url then      
    @window.goto_tab(s) { enter url}
  else
    @window.goto_tab(s)
  end
  
end

#new_tabObject



333
334
335
# File 'lib/xautobrowse.rb', line 333

def new_tab()
  @window.new_tab
end

#new_windowObject



329
330
331
# File 'lib/xautobrowse.rb', line 329

def new_window()
  @window = Window.new
end

#open_web_consoleObject Also known as: web_console



313
314
315
316
317
318
319
320
321
322
323
324
325
# File 'lib/xautobrowse.rb', line 313

def open_web_console()
  
  console  = @browser == :firefox ? :ctrl_shift_k : :ctrl_shift_i
  method(console).call # web console
  
  sleep 2
  
  if block_given? then
    yield(self)
    close_web_console()
  end
  
end

#screenshot(filename = Time.now\ .strftime("Screenshot from %Y-%m-%d %d-%m-%y")) ⇒ Object Also known as: screen_capture

Takes a screenshot of the web page. Images are stored in ~/Pictures



339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
# File 'lib/xautobrowse.rb', line 339

def screenshot(filename=Time.now\
               .strftime("Screenshot from %Y-%m-%d %d-%m-%y"))
  
  XDo::Keyboard.simulate('{print}'); 
  sleep 4; 
  XDo::Keyboard.simulate("{down}")
  sleep 4; 
  XDo::Keyboard.alt_s    
  sleep 5;
  XDo::Keyboard.type filename
  sleep 3
  XDo::Keyboard.alt_s
  sleep 1
  
end

#select_allObject



361
362
363
# File 'lib/xautobrowse.rb', line 361

def select_all()
  ctrl_a()
end

#send(s) ⇒ Object



357
358
359
# File 'lib/xautobrowse.rb', line 357

def send(s)
  @udr.send s
end

#shift_tab(n = 1) ⇒ Object



401
402
403
404
405
406
407
408
# File 'lib/xautobrowse.rb', line 401

def shift_tab(n=1)
  
  @window.activate()
  XDo::Keyboard.key_down('shift')
  XDo::Keyboard.simulate("{TAB}" * n)
  XDo::Keyboard.key_up('shift')
  
end

#slow_tab(n = 1, seconds: 0.5) ⇒ Object



371
372
373
# File 'lib/xautobrowse.rb', line 371

def slow_tab(n=1, seconds: 0.5)
  n.times {XDo::Keyboard.simulate("{TAB}"); sleep seconds}
end

#slow_type(s, seconds: 0.6) ⇒ Object



375
376
377
378
379
380
381
382
383
384
# File 'lib/xautobrowse.rb', line 375

def slow_type(s, seconds: 0.6)
  
  #@window.activate(); 
  sleep 0.3
  
  s.split(//).each do |c|
    XDo::Keyboard.type(c)
    sleep seconds
  end
end

#start_brokerObject

Starts the simplepubsub broker



389
390
391
392
393
394
395
# File 'lib/xautobrowse.rb', line 389

def start_broker()
  
  Thread.new do 
    `ruby -r 'simplepubsub' -e "SimplePubSub::Broker.start port: '55000'"`
  end
  
end

#stop_brokerObject



397
398
399
# File 'lib/xautobrowse.rb', line 397

def stop_broker()
  SPSPub.notice 'shutdown', host: '127.0.0.1', port: '55000'
end

#tab(n = 1) ⇒ Object



410
411
412
# File 'lib/xautobrowse.rb', line 410

def tab(n=1)
  @window.activate(); XDo::Keyboard.simulate("{TAB}" * n)
end

#tab?(s) ⇒ Boolean

determines if the given tabbed window title exists for the given tabbed windows

Returns:

  • (Boolean)


417
418
419
# File 'lib/xautobrowse.rb', line 417

def tab?(s)
  @window.tab?(s)
end

#text_field(id2, klass: nil, id: nil, name: nil, value: '') ⇒ Object



421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
# File 'lib/xautobrowse.rb', line 421

def text_field(id2, klass: nil, id: nil, name: nil, value: '')
  
  open_web_console() do |console|
  
    cmd = if klass then
      "querySelector('#{klass}')"
    elsif id then
      "getElementById(\"#{id}\")"
    elsif name then
      @text_fields[id2]
    end

    a = [
      'r = ' + [@context, 'document'].compact.join('.') + '.' + cmd, 
      "r.value = \"\"", 
      "r.focus()"
    ]
                                             
    a.each {|x| console.enter x }
  
  end
  
  sleep 2; type(value); sleep 1

end

#titleObject



447
448
449
# File 'lib/xautobrowse.rb', line 447

def title()
  @window.title
end

#to_docObject



451
452
453
454
# File 'lib/xautobrowse.rb', line 451

def to_doc()
  copy_source(); sleep 0.5
  Nokorexi.new(Clipboard.paste).to_doc
end

#type(s) ⇒ Object

type some text



458
# File 'lib/xautobrowse.rb', line 458

def type(s)  @window.activate(); XDo::Keyboard.type(s)  end

#unselect_allObject



365
366
367
368
369
# File 'lib/xautobrowse.rb', line 365

def unselect_all()
  
  @browser == :firefox ? (tab(); shift_tab()) : ctrl_shift_a()
  
end

#view_sourceObject



460
461
462
463
464
465
466
# File 'lib/xautobrowse.rb', line 460

def view_source()
  
  @window.activate(); sleep 0.5
  ctrl_l() # jump to the location bar
  sleep 0.6; tab(2); sleep 0.5; ctrl_u()  # View source code
  
end