xautobrowse 0.3.5 → 0.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/xautobrowse.rb +174 -163
- data.tar.gz.sig +1 -2
- metadata +37 -36
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a25f8dde31e35a29de9110a5e68909f39c88e5d54f9e841774103606dec66399
|
4
|
+
data.tar.gz: 4b3d2f68990ccad4ea1b2ea68ccbb95901cc9ab58ddced00e85c8268437007ea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e84fa69febe5df40b17b3bb28451e69c97fe27ad4c630673c52d3134eacefc46ac2609f15fc77bf6b30d0ce47226434c0bf8af55ca786352f50e2100deaa9644
|
7
|
+
data.tar.gz: 0ec8887dbecf4ee21190934d7099ae49b2e2d85cab4e2105325b721919367c539303affe8ce40624190c9ca79b1278af7b94b6771f3d31a6df908831bb9aa321
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/lib/xautobrowse.rb
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
|
10
10
|
# revision log:
|
11
|
-
|
11
|
+
# 9 Jun 2022: commented out the buggy redundant XDo::XWindow statements
|
12
12
|
# 4 Sep 2019: feature: Added methods *slow_type* and *slow_tab*
|
13
13
|
# 5 Sep 2018: feature: A new tab can now be opened if it does not exist.
|
14
14
|
# 4 Sep 2018: feature: Tabs can now be traversed using the XTabbedWindow gem
|
@@ -49,36 +49,40 @@ require 'universal_dom_remote'
|
|
49
49
|
|
50
50
|
|
51
51
|
class XAutoBrowse
|
52
|
-
|
52
|
+
|
53
53
|
at_exit() do
|
54
|
-
|
54
|
+
|
55
55
|
if @sps then
|
56
56
|
puts 'shutting down ...'
|
57
57
|
EventMachine.stop
|
58
58
|
SPSPub.notice('shutdown', host: '127.0.0.1', port: '55000'); sleep 0.5
|
59
59
|
end
|
60
|
-
|
60
|
+
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
class Window < XTabbedWindow
|
64
|
-
|
65
|
-
def initialize(browser=nil, new_win: true, scan_tabs: false)
|
66
|
-
|
67
|
-
@wm = WMCtrl.
|
68
|
-
|
64
|
+
|
65
|
+
def initialize(browser=nil, new_win: true, scan_tabs: false, debug: false)
|
66
|
+
|
67
|
+
@wm, @debug = WMCtrl.display, debug
|
68
|
+
|
69
69
|
if browser then
|
70
|
-
|
70
|
+
|
71
71
|
if new_win then
|
72
|
-
spawn(browser.to_s); sleep 3
|
73
|
-
|
74
|
-
id = XDo::XWindow.wait_for_window(browser.to_s)
|
75
72
|
|
76
|
-
|
77
|
-
|
78
|
-
|
73
|
+
puts 'ready to spawn' if @debug
|
74
|
+
spawn(browser.to_s);
|
75
|
+
sleep 3
|
76
|
+
|
77
|
+
#jr2022-06-09 puts 'waiting for window: ' + browser.to_s.inspect if @debug
|
78
|
+
#jr2022-06-09 id = XDo::XWindow.wait_for_window(browser.to_s)
|
79
|
+
|
80
|
+
#jr2022-06-09 xwin = XDo::XWindow.new(id)
|
81
|
+
#jr2022-06-09 title = xwin.title
|
82
|
+
#jr2022-06-09 puts 'title: ' + title.inspect if @debug
|
79
83
|
|
80
84
|
# WMCtrl is used because XDo is problematic at trying to activate a window
|
81
|
-
|
85
|
+
|
82
86
|
a = @wm.list_windows true
|
83
87
|
puts 'a: ' + a.inspect if @debug
|
84
88
|
r = a.reverse.find {|x| x[:title] =~ /#{browser}$/i}
|
@@ -89,173 +93,175 @@ class XAutoBrowse
|
|
89
93
|
else
|
90
94
|
a = @wm.list_windows true
|
91
95
|
r = a.last
|
92
|
-
end
|
93
|
-
|
96
|
+
end
|
97
|
+
|
94
98
|
@id = r[:id]
|
95
99
|
|
96
|
-
@x, @y, @width, @height = *r[:geometry]
|
100
|
+
@x, @y, @width, @height = *r[:geometry]
|
97
101
|
sleep 4 unless browser
|
98
|
-
|
102
|
+
|
99
103
|
end
|
100
|
-
|
104
|
+
|
101
105
|
def activate()
|
102
106
|
@wm.action_window(@id, :activate)
|
103
107
|
end
|
104
|
-
|
108
|
+
|
105
109
|
def height=(val)
|
106
110
|
@height = val
|
107
111
|
@wm.action_window(@id, :move_resize, 0, @x, @y, @width, @height)
|
108
|
-
end
|
109
|
-
|
112
|
+
end
|
113
|
+
|
110
114
|
def move(x,y)
|
111
115
|
@x, @y = x, y
|
112
116
|
@wm.action_window(@id, :move_resize, 0, @x, @y, @width, @height)
|
113
|
-
end
|
114
|
-
|
117
|
+
end
|
118
|
+
|
115
119
|
def resize_to(width, height)
|
116
120
|
@width, @height = width, height
|
117
121
|
@wm.action_window(@id, :move_resize, 0, @x, @y, @width, @height)
|
118
122
|
end
|
119
|
-
|
123
|
+
|
120
124
|
alias resize resize_to
|
121
125
|
|
122
126
|
def width=(val)
|
123
127
|
@width = val
|
124
128
|
@wm.action_window(@id, :move_resize, 0, @x, @y, @width, @height)
|
125
|
-
end
|
129
|
+
end
|
126
130
|
end
|
127
|
-
|
131
|
+
|
128
132
|
attr_reader :window
|
129
133
|
attr_accessor :actions, :context
|
130
|
-
|
134
|
+
|
131
135
|
# note: context is the parent of the document element e.g. frames[0]
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
def initialize(browser= :firefox, new_window: true, debug: false,
|
136
|
-
sps: false, clicks: {}, scan_tabs: !new_window,
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
def initialize(browser= :firefox, new_window: true, debug: false,
|
140
|
+
sps: false, clicks: {}, scan_tabs: !new_window,
|
137
141
|
context: nil, text_fields: {})
|
138
142
|
|
139
143
|
@browser, @debug, @sps, @clicks = browser.to_sym, debug, sps, clicks
|
140
144
|
@new_window, @context, @text_fields = new_window, context, text_fields
|
141
|
-
|
142
|
-
|
145
|
+
|
146
|
+
puts 'before Window.new' if @debug
|
147
|
+
@window = Window.new(browser, new_win: new_window, scan_tabs: scan_tabs,
|
148
|
+
debug: @debug)
|
143
149
|
|
144
150
|
sleep 4 if new_window
|
145
|
-
|
151
|
+
|
146
152
|
connect() if sps
|
147
|
-
|
153
|
+
|
148
154
|
end
|
149
|
-
|
150
|
-
# custom accesskey (e.g. CTRL+SHIFT+S) typically used to reference an
|
155
|
+
|
156
|
+
# custom accesskey (e.g. CTRL+SHIFT+S) typically used to reference an
|
151
157
|
# element on the web page
|
152
158
|
#
|
153
159
|
def accesskey(key) send_keys(key.to_sym) end
|
154
|
-
|
155
|
-
alias access_key accesskey
|
156
|
-
|
157
|
-
# Attaches the SPS client to the web browser. The SPS broker must be
|
160
|
+
|
161
|
+
alias access_key accesskey
|
162
|
+
|
163
|
+
# Attaches the SPS client to the web browser. The SPS broker must be
|
158
164
|
# started before the code can be attached. see start_broker()
|
159
165
|
#
|
160
166
|
def attach_console(autohide: true)
|
161
|
-
|
167
|
+
|
162
168
|
@window.activate()
|
163
169
|
open_web_console(); sleep 1
|
164
170
|
|
165
|
-
clipboard = Clipboard.paste
|
171
|
+
clipboard = Clipboard.paste
|
166
172
|
Clipboard.copy javascript(); sleep 1
|
167
173
|
ctrl_v(); sleep 0.5; carriage_return()
|
168
|
-
|
174
|
+
|
169
175
|
close_web_console() if autohide
|
170
176
|
Clipboard.copy clipboard
|
171
|
-
|
177
|
+
|
172
178
|
end
|
173
|
-
|
179
|
+
|
174
180
|
def click(name)
|
175
|
-
|
176
|
-
web_console do |x|
|
181
|
+
|
182
|
+
web_console do |x|
|
177
183
|
x.enter [@context, @clicks[name]].compact.join('.') + '.click();'
|
178
184
|
end
|
179
|
-
|
180
|
-
end
|
181
|
-
|
185
|
+
|
186
|
+
end
|
187
|
+
|
182
188
|
def close()
|
183
189
|
ctrl_w()
|
184
190
|
end
|
185
|
-
|
191
|
+
|
186
192
|
alias exit close
|
187
|
-
|
193
|
+
|
188
194
|
def close_web_console()
|
189
195
|
@window.activate()
|
190
196
|
ctrl_shift_i()
|
191
197
|
end
|
192
|
-
|
198
|
+
|
193
199
|
alias hide_web_console close_web_console
|
194
|
-
|
200
|
+
|
195
201
|
def connect()
|
196
202
|
|
197
203
|
start_broker(); sleep 4; connect_controller()
|
198
|
-
|
204
|
+
|
199
205
|
end
|
200
|
-
|
206
|
+
|
201
207
|
# Connects to the SPS broker to communicate with the web browser
|
202
208
|
#
|
203
209
|
def connect_controller()
|
204
|
-
|
210
|
+
|
205
211
|
@udr = UniversalDomRemote.new debug: @debug
|
206
|
-
|
212
|
+
|
207
213
|
end
|
208
|
-
|
214
|
+
|
209
215
|
def copy_screen()
|
210
216
|
select_all(); sleep 2; ctrl_c(); sleep 2; unselect_all()
|
211
|
-
Clipboard.paste
|
217
|
+
Clipboard.paste
|
212
218
|
end
|
213
|
-
|
219
|
+
|
214
220
|
alias scrape_screen copy_screen
|
215
|
-
|
221
|
+
|
216
222
|
def copy_source()
|
217
|
-
|
223
|
+
|
218
224
|
view_source(); sleep 3
|
219
225
|
select_all(); sleep 1
|
220
226
|
ctrl_c() # copy the source code to the clipboard
|
221
227
|
sleep 1
|
222
228
|
ctrl_w() # close the viewsource window
|
223
|
-
|
229
|
+
|
224
230
|
end
|
225
|
-
|
231
|
+
|
226
232
|
# select all
|
227
233
|
#
|
228
234
|
def ctrl_a() send_keys(:ctrl_a) end
|
229
|
-
|
235
|
+
|
230
236
|
# unselect all
|
231
237
|
#
|
232
238
|
def ctrl_shift_a()
|
233
239
|
|
234
240
|
XDo::Keyboard.key_down('shift')
|
235
241
|
send_keys(:ctrl_a)
|
236
|
-
XDo::Keyboard.key_up('shift')
|
242
|
+
XDo::Keyboard.key_up('shift')
|
243
|
+
|
244
|
+
end
|
237
245
|
|
238
|
-
end
|
239
|
-
|
240
246
|
# copy
|
241
247
|
#
|
242
248
|
def ctrl_c() send_keys(:ctrl_c) end
|
243
|
-
|
249
|
+
|
244
250
|
# jump to the location bar
|
245
251
|
#
|
246
|
-
def ctrl_l() send_keys(:ctrl_l) end
|
247
|
-
|
252
|
+
def ctrl_l() send_keys(:ctrl_l) end
|
253
|
+
|
248
254
|
# view source code
|
249
255
|
#
|
250
|
-
def ctrl_u() send_keys(:ctrl_u) end
|
251
|
-
|
256
|
+
def ctrl_u() send_keys(:ctrl_u) end
|
257
|
+
|
252
258
|
# paste
|
253
259
|
#
|
254
260
|
def ctrl_v() send_keys(:ctrl_v) end
|
255
|
-
|
261
|
+
|
256
262
|
# close the current window
|
257
263
|
#
|
258
|
-
def ctrl_w() send_keys(:ctrl_w) end
|
264
|
+
def ctrl_w() send_keys(:ctrl_w) end
|
259
265
|
|
260
266
|
# Chromium developer tools
|
261
267
|
#
|
@@ -264,21 +270,21 @@ class XAutoBrowse
|
|
264
270
|
# Firefox developer tools
|
265
271
|
#
|
266
272
|
def ctrl_shift_k() send_keys(:ctrl_shift_k) end
|
267
|
-
|
273
|
+
|
268
274
|
# submit a form by pressing return
|
269
275
|
#
|
270
276
|
def go()
|
271
|
-
|
277
|
+
|
272
278
|
if block_given? then
|
273
|
-
|
279
|
+
|
274
280
|
@window.activate(); sleep 1; yield(self); carriage_return()
|
275
|
-
|
281
|
+
|
276
282
|
end
|
277
|
-
|
283
|
+
|
278
284
|
end
|
279
|
-
|
285
|
+
|
280
286
|
def goto(url, attachconsole: true, new_tab: !@new_window)
|
281
|
-
|
287
|
+
|
282
288
|
new_tab() if new_tab
|
283
289
|
sleep 1; ctrl_l()
|
284
290
|
sleep 2 if @new_window
|
@@ -289,139 +295,139 @@ class XAutoBrowse
|
|
289
295
|
end
|
290
296
|
|
291
297
|
def goto_tab(s, url=nil)
|
292
|
-
|
293
|
-
if url then
|
298
|
+
|
299
|
+
if url then
|
294
300
|
@window.goto_tab(s) { enter url}
|
295
301
|
else
|
296
302
|
@window.goto_tab(s)
|
297
303
|
end
|
298
|
-
|
304
|
+
|
299
305
|
end
|
300
|
-
|
306
|
+
|
301
307
|
def carriage_return()
|
302
308
|
@window.activate(); sleep 1; XDo::Keyboard.return
|
303
309
|
end
|
304
|
-
|
310
|
+
|
305
311
|
alias cr carriage_return
|
306
|
-
|
312
|
+
|
307
313
|
def method_missing(method_name, *args)
|
308
314
|
if method_name.to_s =~ /^alt/ then
|
309
315
|
send_keys method_name
|
310
316
|
end
|
311
|
-
end
|
312
|
-
|
317
|
+
end
|
318
|
+
|
313
319
|
def open_web_console()
|
314
|
-
|
320
|
+
|
315
321
|
console = @browser == :firefox ? :ctrl_shift_k : :ctrl_shift_i
|
316
322
|
method(console).call # web console
|
317
|
-
|
323
|
+
|
318
324
|
sleep 2
|
319
|
-
|
325
|
+
|
320
326
|
if block_given? then
|
321
327
|
yield(self)
|
322
328
|
close_web_console()
|
323
329
|
end
|
324
|
-
|
330
|
+
|
325
331
|
end
|
326
|
-
|
332
|
+
|
327
333
|
alias web_console open_web_console
|
328
|
-
|
334
|
+
|
329
335
|
def new_window()
|
330
336
|
@window = Window.new
|
331
337
|
end
|
332
|
-
|
338
|
+
|
333
339
|
def new_tab()
|
334
340
|
@window.new_tab
|
335
341
|
end
|
336
|
-
|
342
|
+
|
337
343
|
# Takes a screenshot of the web page. Images are stored in ~/Pictures
|
338
344
|
#
|
339
345
|
def screenshot(filename=Time.now\
|
340
346
|
.strftime("Screenshot from %Y-%m-%d %d-%m-%y"))
|
341
|
-
|
342
|
-
XDo::Keyboard.simulate('{print}');
|
343
|
-
sleep 4;
|
347
|
+
|
348
|
+
XDo::Keyboard.simulate('{print}');
|
349
|
+
sleep 4;
|
344
350
|
XDo::Keyboard.simulate("{down}")
|
345
|
-
sleep 4;
|
346
|
-
XDo::Keyboard.alt_s
|
351
|
+
sleep 4;
|
352
|
+
XDo::Keyboard.alt_s
|
347
353
|
sleep 5;
|
348
354
|
XDo::Keyboard.type filename
|
349
355
|
sleep 3
|
350
356
|
XDo::Keyboard.alt_s
|
351
357
|
sleep 1
|
352
|
-
|
358
|
+
|
353
359
|
end
|
354
|
-
|
360
|
+
|
355
361
|
alias screen_capture screenshot
|
356
|
-
|
362
|
+
|
357
363
|
def send(s)
|
358
364
|
@udr.send s
|
359
365
|
end
|
360
|
-
|
366
|
+
|
361
367
|
def select_all()
|
362
368
|
ctrl_a()
|
363
369
|
end
|
364
|
-
|
370
|
+
|
365
371
|
def unselect_all()
|
366
|
-
|
372
|
+
|
367
373
|
@browser == :firefox ? (tab(); shift_tab()) : ctrl_shift_a()
|
368
|
-
|
374
|
+
|
369
375
|
end
|
370
|
-
|
376
|
+
|
371
377
|
def slow_tab(n=1, seconds: 0.5)
|
372
378
|
n.times {XDo::Keyboard.simulate("{TAB}"); sleep seconds}
|
373
379
|
end
|
374
|
-
|
380
|
+
|
375
381
|
def slow_type(s, seconds: 0.6)
|
376
|
-
|
377
|
-
#@window.activate();
|
382
|
+
|
383
|
+
#@window.activate();
|
378
384
|
sleep 0.3
|
379
|
-
|
385
|
+
|
380
386
|
s.split(//).each do |c|
|
381
387
|
XDo::Keyboard.type(c)
|
382
388
|
sleep seconds
|
383
389
|
end
|
384
390
|
end
|
385
391
|
|
386
|
-
|
392
|
+
|
387
393
|
# Starts the simplepubsub broker
|
388
|
-
|
394
|
+
|
389
395
|
def start_broker()
|
390
|
-
|
391
|
-
Thread.new do
|
396
|
+
|
397
|
+
Thread.new do
|
392
398
|
`ruby -r 'simplepubsub' -e "SimplePubSub::Broker.start port: '55000'"`
|
393
399
|
end
|
394
|
-
|
400
|
+
|
395
401
|
end
|
396
|
-
|
402
|
+
|
397
403
|
def stop_broker()
|
398
404
|
SPSPub.notice 'shutdown', host: '127.0.0.1', port: '55000'
|
399
405
|
end
|
400
|
-
|
406
|
+
|
401
407
|
def shift_tab(n=1)
|
402
|
-
|
408
|
+
|
403
409
|
@window.activate()
|
404
410
|
XDo::Keyboard.key_down('shift')
|
405
411
|
XDo::Keyboard.simulate("{TAB}" * n)
|
406
412
|
XDo::Keyboard.key_up('shift')
|
407
|
-
|
413
|
+
|
408
414
|
end
|
409
|
-
|
415
|
+
|
410
416
|
def tab(n=1)
|
411
417
|
@window.activate(); XDo::Keyboard.simulate("{TAB}" * n)
|
412
418
|
end
|
413
|
-
|
414
|
-
# determines if the given tabbed window title exists
|
419
|
+
|
420
|
+
# determines if the given tabbed window title exists
|
415
421
|
# for the given tabbed windows
|
416
422
|
#
|
417
423
|
def tab?(s)
|
418
424
|
@window.tab?(s)
|
419
425
|
end
|
420
|
-
|
426
|
+
|
421
427
|
def text_field(id2, klass: nil, id: nil, name: nil, value: '')
|
422
|
-
|
428
|
+
|
423
429
|
open_web_console() do |console|
|
424
|
-
|
430
|
+
|
425
431
|
cmd = if klass then
|
426
432
|
"querySelector('#{klass}')"
|
427
433
|
elsif id then
|
@@ -431,58 +437,63 @@ class XAutoBrowse
|
|
431
437
|
end
|
432
438
|
|
433
439
|
a = [
|
434
|
-
'r = ' + [@context, 'document'].compact.join('.') + '.' + cmd,
|
435
|
-
"r.value = \"\"",
|
440
|
+
'r = ' + [@context, 'document'].compact.join('.') + '.' + cmd,
|
441
|
+
"r.value = \"\"",
|
436
442
|
"r.focus()"
|
437
443
|
]
|
438
|
-
|
444
|
+
|
439
445
|
a.each {|x| console.enter x }
|
440
|
-
|
446
|
+
|
441
447
|
end
|
442
|
-
|
448
|
+
|
443
449
|
sleep 2; type(value); sleep 1
|
444
450
|
|
445
451
|
end
|
446
|
-
|
452
|
+
|
447
453
|
def title()
|
448
454
|
@window.title
|
449
455
|
end
|
450
|
-
|
456
|
+
|
451
457
|
def to_doc()
|
452
458
|
copy_source(); sleep 0.5
|
453
459
|
Nokorexi.new(Clipboard.paste).to_doc
|
454
460
|
end
|
455
|
-
|
461
|
+
|
456
462
|
# type some text
|
457
463
|
#
|
458
|
-
def type(s)
|
459
|
-
|
464
|
+
def type(s)
|
465
|
+
|
466
|
+
@window.activate();
|
467
|
+
s.chars.each {|char| XDo::Keyboard.type(char) ; sleep 0.008 }
|
468
|
+
|
469
|
+
end
|
470
|
+
|
460
471
|
def view_source()
|
461
|
-
|
472
|
+
|
462
473
|
@window.activate(); sleep 0.5
|
463
474
|
ctrl_l() # jump to the location bar
|
464
475
|
sleep 0.6; tab(2); sleep 0.5; ctrl_u() # View source code
|
465
|
-
|
466
|
-
end
|
467
|
-
|
468
|
-
|
476
|
+
|
477
|
+
end
|
478
|
+
|
479
|
+
|
469
480
|
# input some text
|
470
481
|
#
|
471
482
|
def enter(s=nil)
|
472
|
-
|
483
|
+
|
473
484
|
if s then
|
474
485
|
type(s)
|
475
486
|
sleep 0.8
|
476
487
|
end
|
477
|
-
|
488
|
+
|
478
489
|
carriage_return()
|
479
490
|
sleep 1
|
480
|
-
|
491
|
+
|
481
492
|
end
|
482
493
|
|
483
|
-
|
494
|
+
|
484
495
|
private
|
485
|
-
|
496
|
+
|
486
497
|
# A helpful method to generate the javascript code necessary for the
|
487
498
|
# web browser to communicate with the universal DOM remote
|
488
499
|
#
|
@@ -514,11 +525,11 @@ ws.onmessage = function(event) {
|
|
514
525
|
};
|
515
526
|
"
|
516
527
|
|
517
|
-
end
|
518
|
-
|
528
|
+
end
|
529
|
+
|
519
530
|
def send_keys(keys)
|
520
|
-
|
521
|
-
@window.activate(); XDo::Keyboard.send keys.to_sym
|
522
|
-
|
531
|
+
|
532
|
+
@window.activate(); XDo::Keyboard.send keys.to_sym
|
533
|
+
|
523
534
|
end
|
524
535
|
end
|
data.tar.gz.sig
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
|
2
|
-
ي@��������o�G3|2=�����s%pzq T�H�Ja��1�Ԡ��?I�vj�5�q �A)��z�2�_�G�<����Ex �~�H��tԌ��z� WˍF�+��J5�_y��U$H.�H-9����5�"�)�j% �ϫ"
|
1
|
+
��#X&�x���-a�=�@S�����o����QғÕy鵧D����L-�9$�O�7���*1���8N�Q��快��`Q�a����l��O$ �c�����>����ˑ*'ݐ@Fh\/�i��*�Uf�;�rg}��7#Z�sf�OGEB�[�Nб�yW!PG��/B�%4>��0�x&�Hwq/��A�mt@��X���/<�B\U!����;P�������-<�ݪ�
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xautobrowse
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -10,32 +10,33 @@ bindir: bin
|
|
10
10
|
cert_chain:
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
13
|
+
MIIEljCCAv6gAwIBAgIBATANBgkqhkiG9w0BAQsFADBIMRIwEAYDVQQDDAlnZW1t
|
14
|
+
YXN0ZXIxHjAcBgoJkiaJk/IsZAEZFg5qYW1lc3JvYmVydHNvbjESMBAGCgmSJomT
|
15
|
+
8ixkARkWAmV1MB4XDTIyMDYwOTEzNTcyMloXDTIzMDYwOTEzNTcyMlowSDESMBAG
|
16
|
+
A1UEAwwJZ2VtbWFzdGVyMR4wHAYKCZImiZPyLGQBGRYOamFtZXNyb2JlcnRzb24x
|
17
|
+
EjAQBgoJkiaJk/IsZAEZFgJldTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoC
|
18
|
+
ggGBAL85QJIQPZFZzzENljNuTvIR0+ZxIbgGip1iGeuxOrNxN95WrAdyFBClWDIl
|
19
|
+
iyDyV2wCOGAzn++T02bWRlGFCrAOhoW9MEtpKejTFHvMFaCVhvMtg0HILu54B13M
|
20
|
+
wrlKVo40wQBUJmxDw7ZFIfNy3ZDSzT14McxIY/CrJLpIpFoUDene6JjFTJpW7Dx+
|
21
|
+
MuFyuoRUV0b5fL73Elrrqzoxh2/i1BdeFoivd7gIAgTEveQE/lWnhGpxj6Gxxbur
|
22
|
+
mgCyYtTYa5/j3Y1iqL2mrZZwA+KzwQnJZZa1kufYz9KBxDUP9KiTnJW10OaP66Se
|
23
|
+
xU/QwQPAugPe9EdPTxbfFbWxuS7D2Pm1HrQxpE1nhBsr1pmI43mIamxbj8bsjFov
|
24
|
+
7Or7FPcAr2IL1ptr6kWSJenwQi/MCmokQ7x1O8cwE9isbzRoDEaU7P7ssVKFkBAo
|
25
|
+
ZGQryIcfgjNYphavMVd/K7x7weab46fJagFqiNi739qlqXkgvGfSib4ObNZ2xjNV
|
26
|
+
mYFDYwIDAQABo4GKMIGHMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
|
27
|
+
BBRBdJenDuxk23LDtBgiMvTcYTuKezAmBgNVHREEHzAdgRtnZW1tYXN0ZXJAamFt
|
28
|
+
ZXNyb2JlcnRzb24uZXUwJgYDVR0SBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
|
29
|
+
c29uLmV1MA0GCSqGSIb3DQEBCwUAA4IBgQBl4gTamCrvW7lQC+prevAyQr8tTl3j
|
30
|
+
zLIJA8WIoIIPj5rI44KQ7B5tJIkgaiSOb6n5Q0eyfpTus96bVLC0L28DvH93S33e
|
31
|
+
OU7d09lMG1Jmo0nhJYAsRN+wGx0U/qpLw7yy9h9+RtHEptemu6FP52PJ+lJ6Wnq8
|
32
|
+
5GJ/lyR7EXb3dfE6E2Nx0GW9wjDHXwUoirC7QNWDlo9HeJ6xkZnkzq6nyX181eBJ
|
33
|
+
kQ6N6MNe7jcBKwiWfc8T6RLUnO68vR9KWDQaPM49+ad1d6ziTTIF2FWk9GHi9dZC
|
34
|
+
zpFzFBnYkBt1QgNzPEjPWkXGsmV8dmSHPaBLgJUIMdXuYtPvJasPj13nBjdehLgw
|
35
|
+
ab4GEwmDGKmofs3jhDErkvjkAe8DuhtXWYJTdRzoPWCJYczPPh/46xd/3nbp9pFu
|
36
|
+
/yd/2nP/38PioQ+41JdAFyb42dDQx+Pe9cLS5RW1f5z8bANhHWYam/4YiCq3tqIb
|
37
|
+
O4E/MTUmSDAZpUWRzAyC6ty6tQXjvrj1yD8=
|
37
38
|
-----END CERTIFICATE-----
|
38
|
-
date:
|
39
|
+
date: 2022-06-09 00:00:00.000000000 Z
|
39
40
|
dependencies:
|
40
41
|
- !ruby/object:Gem::Dependency
|
41
42
|
name: xtabbedwindow
|
@@ -63,40 +64,40 @@ dependencies:
|
|
63
64
|
requirements:
|
64
65
|
- - "~>"
|
65
66
|
- !ruby/object:Gem::Version
|
66
|
-
version: '0.
|
67
|
+
version: '0.7'
|
67
68
|
- - ">="
|
68
69
|
- !ruby/object:Gem::Version
|
69
|
-
version: 0.
|
70
|
+
version: 0.7.0
|
70
71
|
type: :runtime
|
71
72
|
prerelease: false
|
72
73
|
version_requirements: !ruby/object:Gem::Requirement
|
73
74
|
requirements:
|
74
75
|
- - "~>"
|
75
76
|
- !ruby/object:Gem::Version
|
76
|
-
version: '0.
|
77
|
+
version: '0.7'
|
77
78
|
- - ">="
|
78
79
|
- !ruby/object:Gem::Version
|
79
|
-
version: 0.
|
80
|
+
version: 0.7.0
|
80
81
|
- !ruby/object:Gem::Dependency
|
81
82
|
name: clipboard
|
82
83
|
requirement: !ruby/object:Gem::Requirement
|
83
84
|
requirements:
|
84
85
|
- - "~>"
|
85
86
|
- !ruby/object:Gem::Version
|
86
|
-
version: '1.
|
87
|
+
version: '1.3'
|
87
88
|
- - ">="
|
88
89
|
- !ruby/object:Gem::Version
|
89
|
-
version: 1.
|
90
|
+
version: 1.3.6
|
90
91
|
type: :runtime
|
91
92
|
prerelease: false
|
92
93
|
version_requirements: !ruby/object:Gem::Requirement
|
93
94
|
requirements:
|
94
95
|
- - "~>"
|
95
96
|
- !ruby/object:Gem::Version
|
96
|
-
version: '1.
|
97
|
+
version: '1.3'
|
97
98
|
- - ">="
|
98
99
|
- !ruby/object:Gem::Version
|
99
|
-
version: 1.
|
100
|
+
version: 1.3.6
|
100
101
|
- !ruby/object:Gem::Dependency
|
101
102
|
name: simplepubsub
|
102
103
|
requirement: !ruby/object:Gem::Requirement
|
@@ -138,7 +139,7 @@ dependencies:
|
|
138
139
|
- !ruby/object:Gem::Version
|
139
140
|
version: 0.1.1
|
140
141
|
description:
|
141
|
-
email:
|
142
|
+
email: digital.robertson@gmail.com
|
142
143
|
executables: []
|
143
144
|
extensions: []
|
144
145
|
extra_rdoc_files: []
|
@@ -163,7 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
163
164
|
- !ruby/object:Gem::Version
|
164
165
|
version: '0'
|
165
166
|
requirements: []
|
166
|
-
rubygems_version: 3.
|
167
|
+
rubygems_version: 3.3.7
|
167
168
|
signing_key:
|
168
169
|
specification_version: 4
|
169
170
|
summary: A poor man's web automation tool primarily for Firefox in an X windows system.
|
metadata.gz.sig
CHANGED
Binary file
|