xautobrowse 0.1.2 → 0.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d319574fa5c3501f869e6e6300e82b581d70b9ed
4
- data.tar.gz: 764e5db815a9c363ef05e97455470a5883d474be
3
+ metadata.gz: 0ccc76cd36b9b1a4ed1db3be63ee734bc8b4d3ba
4
+ data.tar.gz: c947ce6a6d1d718343ca9ebe71d4197ec54d0948
5
5
  SHA512:
6
- metadata.gz: 27f65ee6a3b0b7e5702300b6436de310fbf4adf349cd31e48cd54647f04d9dcb52624cbe4bd2fdee4ab5dbcba84ecc843be38305ec2ee37a5980ee8a9dab01fa
7
- data.tar.gz: ab1c53b6f81d33bdf14189a3115ff577b5cd828e6ebf7b3c04d422f19cfe18f5139ccb59df5a46338a41f64ca6007ab0155549345196613b2b842f390c83e869
6
+ metadata.gz: 63e7316ef1e5a531e853f5402e6b8482c267d785cd0730dbff0935522447e75fb90f4ca7f2843a4a29e3347a6b6c90d6af0ce29689e395e0084961e6f2c552e8
7
+ data.tar.gz: adc643a9601e25c1e09eb82ffbc4aef15998de9db43dd3ed042d90514c73359127536fa0eb170f525c5881a495ce80bb9e198b67a9c17d239a145139b312f00b
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/xautobrowse.rb CHANGED
@@ -15,13 +15,25 @@
15
15
  require 'wmctrl'
16
16
  require 'nokorexi'
17
17
  require 'clipboard'
18
- require "xdo/mouse"
19
- require "xdo/keyboard"
20
- require "xdo/xwindow"
21
-
18
+ require 'xdo/mouse'
19
+ require 'xdo/keyboard'
20
+ require 'xdo/xwindow'
21
+ require 'universal_dom_remote'
22
22
 
23
23
 
24
24
  class XAutoBrowse
25
+
26
+ at_exit() do
27
+
28
+ puts 'shutting down ...'
29
+ EventMachine.stop
30
+ sleep 3
31
+ `ruby -r sps-pub -e "SPSPub.notice('shutdown', host: \
32
+ '127.0.0.1', port: '55000'); sleep 0.4"`
33
+
34
+
35
+ end
36
+
25
37
 
26
38
  def initialize(browser= :firefox, debug: false)
27
39
 
@@ -43,15 +55,15 @@ class XAutoBrowse
43
55
  @id = r[:id]
44
56
 
45
57
  @x, @y, @width, @height = *r[:geometry]
46
-
58
+ Thread.new { open_web_console(); sleep 1; close_web_console() }
59
+
60
+ connect()
47
61
  end
48
62
 
49
63
  # custom accesskey (e.g. CTRL+SHIFT+S) typically used to reference an
50
64
  # element on the web page
51
65
  #
52
- def accesskey(key)
53
- XDo::Keyboard.send key.to_sym
54
- end
66
+ def accesskey(key) send_keys(key.to_sym) end
55
67
 
56
68
  alias access_key accesskey
57
69
 
@@ -59,6 +71,44 @@ class XAutoBrowse
59
71
  @wm.action_window(@id, :activate)
60
72
  end
61
73
 
74
+ # Attaches the SPS client to the web browser. The SPS broker must be
75
+ # started before the code can be attached. see start_broker()
76
+ #
77
+ def attach_console(autohide: true)
78
+
79
+ activate()
80
+ open_web_console(); sleep 1
81
+
82
+ Clipboard.copy javascript(); sleep 1
83
+ ctrl_v(); sleep 0.5
84
+ carriage_return()
85
+
86
+ close_web_console() if autohide
87
+
88
+ end
89
+
90
+ def close_web_console()
91
+ activate()
92
+ ctrl_shift_i()
93
+ end
94
+
95
+ alias hide_web_console close_web_console
96
+
97
+ def connect()
98
+
99
+ start_broker()
100
+ sleep 5
101
+ connect_controller()
102
+ end
103
+
104
+ # Connects to the SPS broker to communicate with the web browser
105
+ #
106
+ def connect_controller()
107
+
108
+ @udr = UniversalDomRemote.new debug: @debug
109
+
110
+ end
111
+
62
112
  def copy_source()
63
113
 
64
114
  view_source(); sleep 3
@@ -70,23 +120,27 @@ class XAutoBrowse
70
120
 
71
121
  # select all
72
122
  #
73
- def ctrl_a() XDo::Keyboard.ctrl_a end
123
+ def ctrl_a() send_keys(:ctrl_a) end
74
124
 
75
125
  # copy
76
126
  #
77
- def ctrl_c() XDo::Keyboard.ctrl_c end
127
+ def ctrl_c() send_keys(:ctrl_c) end
78
128
 
79
129
  # jump to the location bar
80
130
  #
81
- def ctrl_l() XDo::Keyboard.ctrl_l end
131
+ def ctrl_l() send_keys(:ctrl_l) end
82
132
 
83
133
  # view source code
84
134
  #
85
- def ctrl_u() XDo::Keyboard.ctrl_u end
135
+ def ctrl_u() send_keys(:ctrl_u) end
136
+
137
+ # paste
138
+ #
139
+ def ctrl_v() send_keys(:ctrl_v) end
86
140
 
87
141
  # developer tools
88
142
  #
89
- def ctrl_shift_i() XDo::Keyboard.ctrl_shift_i end
143
+ def ctrl_shift_i() send_keys(:ctrl_shift_i) end
90
144
 
91
145
  # submit a form by pressing return
92
146
  #
@@ -107,6 +161,7 @@ class XAutoBrowse
107
161
  activate(); sleep 0.5
108
162
  ctrl_l(); sleep 0.5
109
163
  enter(url); sleep 4
164
+ attach_console()
110
165
 
111
166
  end
112
167
 
@@ -126,16 +181,41 @@ class XAutoBrowse
126
181
 
127
182
  alias cr carriage_return
128
183
 
184
+ def open_web_console()
185
+
186
+ console = @browser == :firefox ? :ctrl_shift_k : :ctrl_shift_i
187
+ method(console).call # web console
188
+
189
+ sleep 3
190
+
191
+ end
192
+
193
+ def send(s)
194
+ @udr.send s
195
+ end
196
+
197
+ # Starts the simplepubsub broker
198
+
199
+ def start_broker()
200
+
201
+ Thread.new do
202
+ `ruby -r 'simplepubsub' -e "SimplePubSub::Broker.start port: '55000'"`
203
+ end
204
+
205
+ end
206
+
207
+ def stop_broker()
208
+ SPSPub.notice 'shutdown', host: '127.0.0.1', port: '55000'
209
+ end
210
+
129
211
  def tab(n=1)
212
+ activate()
130
213
  XDo::Keyboard.simulate("{TAB}" * n)
131
214
  end
132
215
 
133
216
  def text_field(klass: nil, id: nil, name: nil, value: '')
134
217
 
135
- console = @browser == :firefox ? :ctrl_shift_k : :ctrl_shift_i
136
- method(console).call # web console
137
-
138
- sleep 3
218
+ open_web_console()
139
219
 
140
220
  cmd = if klass then
141
221
  "r = document.querySelector('#{klass}')"
@@ -156,9 +236,9 @@ class XAutoBrowse
156
236
  Nokorexi.new(Clipboard.paste).to_doc
157
237
  end
158
238
 
159
- def type(s)
160
- XDo::Keyboard.type(s)
161
- end
239
+ # type some text
240
+ #
241
+ def type(s) activate(); XDo::Keyboard.type(s) end
162
242
 
163
243
  def view_source()
164
244
 
@@ -174,4 +254,45 @@ class XAutoBrowse
174
254
  #
175
255
  def enter(s) type(s); sleep 0.8; carriage_return(); sleep 1 end
176
256
 
257
+
258
+ private
259
+
260
+ # A helpful method to generate the javascript code necessary for the
261
+ # web browser to communicate with the universal DOM remote
262
+ #
263
+ def javascript()
264
+
265
+ "
266
+ var ws = new WebSocket('ws://127.0.0.1:55000/');
267
+ ws.onopen = function() {
268
+ console.log('CONNECT');
269
+ ws.send('subscribe to topic: udr/controller');
270
+ };
271
+ ws.onclose = function() {
272
+ console.log('DISCONNECT');
273
+ };
274
+ ws.onmessage = function(event) {
275
+
276
+ var a = event.data.split(/: +/,2);
277
+ console.log(a[1]);
278
+
279
+ try {
280
+ r = eval(a[1]);
281
+ }
282
+ catch(err) {
283
+ r = err.message;
284
+ }
285
+
286
+ ws.send('udr/browser: ' + r);
287
+
288
+ };
289
+ "
290
+
291
+ end
292
+
293
+ def send_keys(keys)
294
+
295
+ activate(); XDo::Keyboard.send keys.to_sym
296
+
297
+ end
177
298
  end
data.tar.gz.sig CHANGED
@@ -1,2 +1,3 @@
1
- z��uC �%-u*����YAw��~��ݪR��pDu���`�:�Q�`w��2�M$`BC�*�<��З;m�=�Z婊u?��i�
1
+ n5��}x_2i-��%�:�fe�x� ��H�U.�wg�Cֹ�j�]���i�2 �6�' �n��,k�k�6�XH]Q]l$�g��
2
- �X���#��WVt1
2
+ ?&�7x�}Fz���m8� ��� ) /�R���喲խ�q��]bI7��z_{k�'��2�T�p)�8"AH�$�Q˫�#2��%*�ď�y��H�q7�V��]=#��TͶ
3
+ ١��S����T�8'&��6�Q��4%�����OU�.�u
4
+ e�C�����"�D/ C��ìD�
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.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -30,7 +30,7 @@ cert_chain:
30
30
  UkT65Cjj3pGfXSA+uRiXo7EXRM2Xft7NA1wuE91g2PYjRb8GvdqjxrgF1gp+LHtf
31
31
  Gwk=
32
32
  -----END CERTIFICATE-----
33
- date: 2018-01-28 00:00:00.000000000 Z
33
+ date: 2018-01-30 00:00:00.000000000 Z
34
34
  dependencies:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: xdo
@@ -112,6 +112,46 @@ dependencies:
112
112
  - - ">="
113
113
  - !ruby/object:Gem::Version
114
114
  version: 1.1.1
115
+ - !ruby/object:Gem::Dependency
116
+ name: simplepubsub
117
+ requirement: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - "~>"
120
+ - !ruby/object:Gem::Version
121
+ version: '1.3'
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: 1.3.2
125
+ type: :runtime
126
+ prerelease: false
127
+ version_requirements: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '1.3'
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: 1.3.2
135
+ - !ruby/object:Gem::Dependency
136
+ name: universal_dom_remote
137
+ requirement: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - "~>"
140
+ - !ruby/object:Gem::Version
141
+ version: '0.1'
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: 0.1.1
145
+ type: :runtime
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '0.1'
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: 0.1.1
115
155
  description:
116
156
  email: james@jamesrobertson.eu
117
157
  executables: []
metadata.gz.sig CHANGED
Binary file