iegrip 0.1.3 → 0.1.5
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
- 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
|