iegrip 0.1.3 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/iegrip/version.rb +1 -1
- data/lib/iegrip.rb +167 -81
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fb4eb46a0774e719a6a2b3e0588cc92c1039ca43
|
4
|
+
data.tar.gz: 13a01ce09f4cc574732c4b2c857dbf1ee3f3f432
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e293f99a1b2a773cb24a5ebf47d8fe7f11e224d4101ccc18b12bae282e0fe659ea811f92d72bf0b31c26f1630e3e3fc3b1650c855189f1d36772c6be9289fbb3
|
7
|
+
data.tar.gz: 9202f17bb72b3d69607928d55b4b0c1f8c414a8e54883cba8332ec9ff7d6573374f72250cc14a97067f40f1140c81574e0ecdc3c5e34c49544022a411dad1cff
|
data/lib/iegrip/version.rb
CHANGED
data/lib/iegrip.rb
CHANGED
@@ -21,10 +21,11 @@ module IEgrip
|
|
21
21
|
ver = fs.GetFileVersion(@raw_object.FullName)
|
22
22
|
@majorVersion = ver.split(/\./)[0].to_i
|
23
23
|
@urlDownloadToFile = Win32API.new('urlmon', 'URLDownloadToFileA', %w(l p p l l), 'l')
|
24
|
-
@
|
25
|
-
setup_event()
|
24
|
+
@timeout = 15
|
26
25
|
end
|
27
26
|
|
27
|
+
attr_accessor :timeout
|
28
|
+
|
28
29
|
def version
|
29
30
|
@majorVersion
|
30
31
|
end
|
@@ -34,23 +35,15 @@ module IEgrip
|
|
34
35
|
end
|
35
36
|
|
36
37
|
def navigate(url)
|
37
|
-
before_wait()
|
38
38
|
@raw_object.navigate(url)
|
39
39
|
wait_stable()
|
40
40
|
end
|
41
41
|
|
42
|
-
def before_wait()
|
43
|
-
@location_url = nil
|
44
|
-
@complete_flag = nil
|
45
|
-
end
|
46
|
-
|
47
42
|
COMPLETE_STATE = 4
|
48
|
-
def wait_stable(
|
49
|
-
start_time = Time.now
|
43
|
+
def wait_stable()
|
50
44
|
loop do
|
51
|
-
break if @
|
52
|
-
|
53
|
-
WIN32OLE_EVENT.message_loop
|
45
|
+
break if (@raw_object.Busy != true) and (@raw_object.ReadyState == COMPLETE_STATE)
|
46
|
+
sleep 0.5
|
54
47
|
end
|
55
48
|
end
|
56
49
|
|
@@ -58,19 +51,40 @@ module IEgrip
|
|
58
51
|
@urlDownloadToFile.call(0, href, filename, 0, 0)
|
59
52
|
end
|
60
53
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
54
|
+
end
|
55
|
+
|
56
|
+
module Retry
|
57
|
+
RETRY_INTERVAL = 0.1
|
58
|
+
def retryGetTarget(&proc)
|
59
|
+
#puts "retryGetTarget() start.... proc = #{proc.inspect}"
|
60
|
+
retry_count = (@ie_obj.timeout / RETRY_INTERVAL).to_i
|
61
|
+
retry_count.times do
|
62
|
+
target = proc.call
|
63
|
+
#puts " in retryGetTarget(), target = #{target.inspect}"
|
64
|
+
if target
|
65
|
+
puts "retryGetTarget() Success fin."
|
66
|
+
return target
|
67
67
|
end
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
68
|
+
sleep RETRY_INTERVAL
|
69
|
+
end
|
70
|
+
#puts "retryGetTarget(), return nil."
|
71
|
+
return nil
|
72
|
+
end
|
73
|
+
|
74
|
+
def retryCheck(&proc)
|
75
|
+
#puts "retryCheck() start...."
|
76
|
+
retry_count = (@ie_obj.timeout / RETRY_INTERVAL).to_i
|
77
|
+
retry_count.times do
|
78
|
+
check_result = proc.call
|
79
|
+
#puts " in retryCheck(), check_result = #{check_result.inspect}"
|
80
|
+
if check_result
|
81
|
+
#puts "retryCheck() Success fin."
|
82
|
+
return check_result
|
72
83
|
end
|
73
|
-
|
84
|
+
sleep RETRY_INTERVAL
|
85
|
+
end
|
86
|
+
#puts "retryCheck(), return nil."
|
87
|
+
return nil
|
74
88
|
end
|
75
89
|
end
|
76
90
|
|
@@ -100,53 +114,69 @@ module IEgrip
|
|
100
114
|
end
|
101
115
|
|
102
116
|
module ElementChild
|
117
|
+
include Retry
|
118
|
+
|
103
119
|
def childNodes
|
104
|
-
|
105
|
-
|
120
|
+
retryGetTarget {
|
121
|
+
raw_childNodes = @raw_object.childNodes
|
122
|
+
raw_childNodes ? NodeList.new(raw_childNodes, @ie_obj) : nil
|
123
|
+
}
|
106
124
|
end
|
107
125
|
|
108
126
|
def childElements
|
109
|
-
|
110
|
-
|
127
|
+
retryGetTarget {
|
128
|
+
raw_childNodes = @raw_object.childNodes
|
129
|
+
raw_childNodes ? HTMLElementCollection.new(raw_childNodes, @ie_obj) : nil
|
130
|
+
}
|
111
131
|
end
|
112
132
|
|
113
133
|
def previousSibling
|
114
|
-
|
115
|
-
|
134
|
+
retryGetTarget {
|
135
|
+
raw_node = @raw_object.previousSibling()
|
136
|
+
raw_node ? switch_node_and_element(raw_node) : nil
|
137
|
+
}
|
116
138
|
end
|
117
139
|
|
118
140
|
def nextSibling
|
119
|
-
|
120
|
-
|
141
|
+
retryGetTarget {
|
142
|
+
raw_node = @raw_object.nextSibling()
|
143
|
+
raw_node ? switch_node_and_element(raw_node) : nil
|
144
|
+
}
|
121
145
|
end
|
122
146
|
|
123
147
|
def firstChild
|
124
|
-
|
125
|
-
|
148
|
+
retryGetTarget {
|
149
|
+
raw_node = @raw_object.firstChild()
|
150
|
+
raw_node ? switch_node_and_element(raw_node) : nil
|
151
|
+
}
|
126
152
|
end
|
127
153
|
|
128
154
|
def lastChild
|
129
|
-
|
130
|
-
|
155
|
+
retryGetTarget {
|
156
|
+
raw_node = @raw_object.lastChild()
|
157
|
+
raw_node ? switch_node_and_element(raw_node) : nil
|
158
|
+
}
|
131
159
|
end
|
132
160
|
|
133
161
|
def hasChildNodes()
|
134
|
-
@raw_object.childNodes
|
162
|
+
chileNodes = retryGetTarget {@raw_object.childNodes}
|
163
|
+
chileNodes.length > 0
|
135
164
|
end
|
136
165
|
|
137
166
|
def hasChildElements()
|
138
|
-
@raw_object.childNodes
|
167
|
+
chileNodes = retryGetTarget {@raw_object.childNodes}
|
168
|
+
chileNodes.each {|subnode|
|
139
169
|
return true if (subnode.nodeType != 3) and (subnode.nodeType != 8)
|
140
170
|
}
|
141
171
|
false
|
142
172
|
end
|
143
173
|
|
144
174
|
def contains(node)
|
145
|
-
@raw_object.contains(toRaw(node))
|
175
|
+
retryCheck { @raw_object.contains(toRaw(node)) }
|
146
176
|
end
|
147
177
|
|
148
178
|
def isEqualNode(node)
|
149
|
-
@raw_object.isEqualNode(toRaw(node))
|
179
|
+
retryCheck { @raw_object.isEqualNode(toRaw(node)) }
|
150
180
|
end
|
151
181
|
|
152
182
|
def struct(level=0)
|
@@ -201,6 +231,11 @@ module IEgrip
|
|
201
231
|
inner.push "value='#{tag.value}'"
|
202
232
|
when "style"
|
203
233
|
inner.push "type='#{tag.Type}'"
|
234
|
+
when "script"
|
235
|
+
inner.push "src='#{tag.src}'" if tag.src != ""
|
236
|
+
when "frame"
|
237
|
+
inner.push "src='#{tag.src}'" if tag.src != ""
|
238
|
+
inner.push "name='#{tag.name}'" if tag.name != ""
|
204
239
|
end
|
205
240
|
unless tag.hasChildElements
|
206
241
|
innerText = tag.innerText
|
@@ -219,46 +254,68 @@ module IEgrip
|
|
219
254
|
end
|
220
255
|
return [inner.join(' '), outer]
|
221
256
|
end
|
257
|
+
|
258
|
+
def switch_node_and_element(raw_node)
|
259
|
+
if raw_node.nodeType == 1
|
260
|
+
HTMLElement.new(raw_node, @ie_obj)
|
261
|
+
else
|
262
|
+
Node.new(raw_node, @ie_obj)
|
263
|
+
end
|
264
|
+
end
|
222
265
|
end
|
223
266
|
|
224
267
|
module GetElements
|
268
|
+
include Retry
|
269
|
+
|
225
270
|
def getElementsByName(name)
|
226
|
-
|
227
|
-
|
271
|
+
retryGetTarget {
|
272
|
+
raw_col = @raw_object.getElementsByName(name)
|
273
|
+
raw_col ? HTMLElementCollection.new(raw_col, @ie_obj) : nil
|
274
|
+
}
|
228
275
|
end
|
229
276
|
|
230
277
|
|
231
278
|
def getElementsByTagName(tag_name)
|
232
|
-
|
233
|
-
|
279
|
+
retryGetTarget {
|
280
|
+
raw_col = @raw_object.getElementsByTagName(tag_name)
|
281
|
+
raw_col ? HTMLElementCollection.new(raw_col, @ie_obj) : nil
|
282
|
+
}
|
234
283
|
end
|
235
284
|
alias elements getElementsByTagName
|
236
285
|
|
237
286
|
def getElementsByTitle(target_str)
|
238
|
-
get_elements_by_key(target_str, "VALUE")
|
287
|
+
retryGetTarget { get_elements_by_key(target_str, "VALUE") }
|
239
288
|
end
|
240
289
|
def getElementsByValue(target_str)
|
241
|
-
get_elements_by_key(target_str, "VALUE")
|
290
|
+
retryGetTarget { get_elements_by_key(target_str, "VALUE") }
|
242
291
|
end
|
243
292
|
def getElementsByText(target_str)
|
244
|
-
get_elements_by_key(target_str, "INNERTEXT")
|
293
|
+
retryGetTarget { get_elements_by_key(target_str, "INNERTEXT") }
|
245
294
|
end
|
246
295
|
|
247
296
|
def getElementByTitle(target_str)
|
248
|
-
|
249
|
-
|
297
|
+
retryGetTarget {
|
298
|
+
taglist = get_elements_by_key(target_str, "VALUE")
|
299
|
+
taglist[0]
|
300
|
+
}
|
250
301
|
end
|
251
302
|
def getElementByValue(target_str)
|
252
|
-
|
253
|
-
|
303
|
+
retryGetTarget {
|
304
|
+
taglist = get_elements_by_key(target_str, "VALUE")
|
305
|
+
taglist[0]
|
306
|
+
}
|
254
307
|
end
|
255
308
|
def getElementByText(target_str)
|
256
|
-
|
257
|
-
|
309
|
+
retryGetTarget {
|
310
|
+
taglist = get_elements_by_key(target_str, "INNERTEXT")
|
311
|
+
taglist[0]
|
312
|
+
}
|
258
313
|
end
|
259
314
|
def getElementByName(target_str)
|
260
|
-
|
261
|
-
|
315
|
+
retryGetTarget {
|
316
|
+
taglist = get_elements_by_key(target_str, "NAME")
|
317
|
+
taglist[0]
|
318
|
+
}
|
262
319
|
end
|
263
320
|
|
264
321
|
private
|
@@ -287,6 +344,7 @@ module IEgrip
|
|
287
344
|
end
|
288
345
|
end
|
289
346
|
|
347
|
+
|
290
348
|
# ========================
|
291
349
|
# Node
|
292
350
|
# ========================
|
@@ -336,24 +394,34 @@ module IEgrip
|
|
336
394
|
class Document < Node
|
337
395
|
include ElementChild
|
338
396
|
include GetElements
|
397
|
+
include Retry
|
339
398
|
|
340
399
|
def head()
|
341
|
-
|
342
|
-
|
400
|
+
retryGetTarget {
|
401
|
+
raw_head = @raw_object.head
|
402
|
+
raw_head ? HTMLElement.new(raw_head, @ie_obj) : nil
|
403
|
+
}
|
343
404
|
end
|
344
405
|
|
345
406
|
def body()
|
346
|
-
|
407
|
+
retryGetTarget {
|
408
|
+
raw_body = @raw_object.body
|
409
|
+
raw_body ? HTMLElement.new(@raw_object.body, @ie_obj) : nil
|
410
|
+
}
|
347
411
|
end
|
348
412
|
|
349
413
|
def all
|
350
|
-
|
351
|
-
|
414
|
+
retryGetTarget {
|
415
|
+
raw_all = @raw_object.all
|
416
|
+
raw_all ? HTMLElementCollection.new(raw_all, @ie_obj) : nil
|
417
|
+
}
|
352
418
|
end
|
353
419
|
|
354
420
|
def frames(index=nil)
|
355
421
|
if index
|
356
|
-
|
422
|
+
frames = retryGetTarget { @raw_object.Frames }
|
423
|
+
return nil unless frames
|
424
|
+
return nil if index >= frames.length
|
357
425
|
Frames.new(@raw_object.frames, @ie_obj)[index]
|
358
426
|
else
|
359
427
|
Frames.new(@raw_object.frames, @ie_obj)
|
@@ -361,13 +429,17 @@ module IEgrip
|
|
361
429
|
end
|
362
430
|
|
363
431
|
def getElementById(element_id)
|
364
|
-
|
365
|
-
|
432
|
+
retryGetTarget {
|
433
|
+
raw_element = @raw_object.getElementById(element_id)
|
434
|
+
raw_element ? HTMLElement.new(raw_element, @ie_obj) : nil
|
435
|
+
}
|
366
436
|
end
|
367
437
|
|
368
438
|
def documentElement
|
369
|
-
|
370
|
-
|
439
|
+
retryGetTarget {
|
440
|
+
raw_element = @raw_object.documentElement()
|
441
|
+
raw_element ? HTMLElement.new(raw_element, @ie_obj) : nil
|
442
|
+
}
|
371
443
|
end
|
372
444
|
|
373
445
|
def createElement(tag_name)
|
@@ -376,7 +448,7 @@ module IEgrip
|
|
376
448
|
end
|
377
449
|
|
378
450
|
def createAttribute(attr_name)
|
379
|
-
raw_attr = @raw_object.createAttribute(attr_name)
|
451
|
+
raw_attr = @raw_object.createAttribute(attr_name)
|
380
452
|
Attr.new(raw_attr, @ie_obj)
|
381
453
|
end
|
382
454
|
|
@@ -389,6 +461,8 @@ module IEgrip
|
|
389
461
|
include ElementParent
|
390
462
|
include ElementChild
|
391
463
|
include GetElements
|
464
|
+
include Retry
|
465
|
+
|
392
466
|
def tagname
|
393
467
|
if self.nodeType == 8
|
394
468
|
"comment"
|
@@ -438,7 +512,6 @@ module IEgrip
|
|
438
512
|
alias text value
|
439
513
|
|
440
514
|
def click
|
441
|
-
@ie_obj.before_wait()
|
442
515
|
if @ie_obj.version >= 10
|
443
516
|
@raw_object.click(false)
|
444
517
|
else
|
@@ -448,7 +521,8 @@ module IEgrip
|
|
448
521
|
end
|
449
522
|
|
450
523
|
def all
|
451
|
-
|
524
|
+
all_element = retyGetElement { @raw_object.all }
|
525
|
+
HTMLElementCollection.new(all_element, @ie_obj)
|
452
526
|
end
|
453
527
|
|
454
528
|
|
@@ -512,7 +586,8 @@ module IEgrip
|
|
512
586
|
end
|
513
587
|
|
514
588
|
def document
|
515
|
-
|
589
|
+
document = retryGettarget { @raw_object.document }
|
590
|
+
document ? Document.new(document, @ie_obj) : nil
|
516
591
|
end
|
517
592
|
|
518
593
|
private
|
@@ -530,7 +605,8 @@ module IEgrip
|
|
530
605
|
# ========================
|
531
606
|
class NodeList < GripWrapper
|
532
607
|
def [](index)
|
533
|
-
|
608
|
+
result = retryCheck { index < @raw_object.length }
|
609
|
+
return(nil) unless result
|
534
610
|
raw_node = @raw_object.item(index)
|
535
611
|
if raw_node.nodeType == 1
|
536
612
|
HTMLElement.new(raw_node, @ie_obj)
|
@@ -562,8 +638,11 @@ module IEgrip
|
|
562
638
|
# TAG Element Collection
|
563
639
|
# ========================
|
564
640
|
class HTMLElementCollection < NodeList
|
641
|
+
include Retry
|
642
|
+
|
565
643
|
def [](index)
|
566
|
-
|
644
|
+
result = retryCheck { index < @raw_object.length }
|
645
|
+
return(nil) unless result
|
567
646
|
raw_node = @raw_object.item(index)
|
568
647
|
HTMLElement.new(raw_node, @ie_obj)
|
569
648
|
end
|
@@ -576,32 +655,32 @@ module IEgrip
|
|
576
655
|
end
|
577
656
|
|
578
657
|
def getElementsByTitle(target_str)
|
579
|
-
get_elements_by_key(target_str, "VALUE")
|
658
|
+
retryGetTarget { get_elements_by_key(target_str, "VALUE") }
|
580
659
|
end
|
581
660
|
def getElementsByValue(target_str)
|
582
|
-
get_elements_by_key(target_str, "VALUE")
|
661
|
+
retryGetTarget { get_elements_by_key(target_str, "VALUE") }
|
583
662
|
end
|
584
663
|
def getElementsByText(target_str)
|
585
|
-
get_elements_by_key(target_str, "INNERTEXT")
|
664
|
+
retryGetTarget { get_elements_by_key(target_str, "INNERTEXT") }
|
586
665
|
end
|
587
666
|
def getElementsByName(target_str)
|
588
|
-
get_elements_by_key(target_str, "NAME")
|
667
|
+
retryGetTarget { get_elements_by_key(target_str, "NAME") }
|
589
668
|
end
|
590
669
|
|
591
670
|
def getElementByTitle(target_str)
|
592
|
-
taglist = get_elements_by_key(target_str, "VALUE")
|
671
|
+
taglist = retryGetTarget { get_elements_by_key(target_str, "VALUE") }
|
593
672
|
taglist ? taglist[0]: nil
|
594
673
|
end
|
595
674
|
def getElementByValue(target_str)
|
596
|
-
taglist = get_elements_by_key(target_str, "VALUE")
|
675
|
+
taglist = retryGetTarget { get_elements_by_key(target_str, "VALUE") }
|
597
676
|
taglist ? taglist[0]: nil
|
598
677
|
end
|
599
678
|
def getElementByText(target_str)
|
600
|
-
taglist = get_elements_by_key(target_str, "INNERTEXT")
|
679
|
+
taglist = retryGetTarget { get_elements_by_key(target_str, "INNERTEXT") }
|
601
680
|
taglist ? taglist[0]: nil
|
602
681
|
end
|
603
682
|
def getElementByName(target_str)
|
604
|
-
taglist = get_elements_by_key(target_str, "NAME")
|
683
|
+
taglist = retryGetTarget { get_elements_by_key(target_str, "NAME") }
|
605
684
|
taglist ? taglist[0]: nil
|
606
685
|
end
|
607
686
|
|
@@ -640,8 +719,12 @@ module IEgrip
|
|
640
719
|
# IE.Document.Frames
|
641
720
|
# ========================
|
642
721
|
class Frames < GripWrapper
|
722
|
+
include Retry
|
723
|
+
|
643
724
|
def [](index)
|
644
|
-
|
725
|
+
result = retryCheck { index < @raw_object.length }
|
726
|
+
return(nil) unless result
|
727
|
+
|
645
728
|
Frame.new(@raw_object.item(index), @ie_obj)
|
646
729
|
end
|
647
730
|
|
@@ -663,8 +746,11 @@ module IEgrip
|
|
663
746
|
# IE.Document.Frames.item(n)
|
664
747
|
# ========================
|
665
748
|
class Frame < GripWrapper
|
749
|
+
include Retry
|
750
|
+
|
666
751
|
def document
|
667
|
-
|
752
|
+
document = retryGetTarget { @raw_object.document }
|
753
|
+
document ? Document.new(document, @ie_obj) : nil
|
668
754
|
end
|
669
755
|
end
|
670
756
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iegrip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- yac4423
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-11-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|