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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/iegrip/version.rb +1 -1
  3. data/lib/iegrip.rb +167 -81
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a55cb782794185c96981b40e9d8fb3dbc581c790
4
- data.tar.gz: 53e9fcd29af463de2f01bf242b66eb6507c9c691
3
+ metadata.gz: fb4eb46a0774e719a6a2b3e0588cc92c1039ca43
4
+ data.tar.gz: 13a01ce09f4cc574732c4b2c857dbf1ee3f3f432
5
5
  SHA512:
6
- metadata.gz: 5e38a0226fa11e5407f714207501babe0f66aea10496e931cdc2aa7ad26912c7d007f6d49076470700a8d8c744f47b639039ddb75adc4936943fad78b3ea05d8
7
- data.tar.gz: d1502bb2bc459d062624f1be74e936ca0beaf1792c389b92574135ef580e19ee1f05efd9e914d59a06138da74b3e589a25a2b015ea42d670c5024fdfbba2fbd4
6
+ metadata.gz: e293f99a1b2a773cb24a5ebf47d8fe7f11e224d4101ccc18b12bae282e0fe659ea811f92d72bf0b31c26f1630e3e3fc3b1650c855189f1d36772c6be9289fbb3
7
+ data.tar.gz: 9202f17bb72b3d69607928d55b4b0c1f8c414a8e54883cba8332ec9ff7d6573374f72250cc14a97067f40f1140c81574e0ecdc3c5e34c49544022a411dad1cff
@@ -1,3 +1,3 @@
1
1
  module IEgrip
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.5"
3
3
  end
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
- @event = WIN32OLE_EVENT.new(@raw_object,"DWebBrowserEvents2")
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(timeout=30)
49
- start_time = Time.now
43
+ def wait_stable()
50
44
  loop do
51
- break if @complete_flag
52
- break if (Time.now - start_time) > timeout
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
- private
62
-
63
- def setup_event()
64
- @event.on_event("NavigateComplete2") {|param|
65
- unless @location_url # Keep First location
66
- @location_url = param.LocationURL
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
- @event.on_event("DocumentComplete") {|param|
70
- if @location_url == param.LocationURL
71
- @complete_flag = true
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
- raw_childNodes = @raw_object.childNodes
105
- raw_childNodes ? NodeList.new(raw_childNodes, @ie_obj) : nil
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
- raw_childNodes = @raw_object.childNodes
110
- raw_childNodes ? HTMLElementCollection.new(raw_childNodes, @ie_obj) : nil
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
- raw_node = @raw_object.previousSibling()
115
- raw_node ? HTMLElement.new(raw_node, @ie_obj) : nil
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
- raw_node = @raw_object.nextSibling()
120
- raw_node ? HTMLElement.new(raw_node, @ie_obj) : nil
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
- raw_node = @raw_object.firstChild()
125
- raw_node ? HTMLElement.new(raw_node, @ie_obj) : nil
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
- raw_node = @raw_object.lastChild()
130
- raw_node ? HTMLElement.new(raw_node, @ie_obj) : nil
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.length > 0
162
+ chileNodes = retryGetTarget {@raw_object.childNodes}
163
+ chileNodes.length > 0
135
164
  end
136
165
 
137
166
  def hasChildElements()
138
- @raw_object.childNodes.each {|subnode|
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
- raw_col = @raw_object.getElementsByName(name)
227
- raw_col ? HTMLElementCollection.new(raw_col, @ie_obj) : nil
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
- raw_col = @raw_object.getElementsByTagName(tag_name)
233
- raw_col ? HTMLElementCollection.new(raw_col, @ie_obj) : nil
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
- taglist = get_elements_by_key(target_str, "VALUE")
249
- taglist[0]
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
- taglist = get_elements_by_key(target_str, "VALUE")
253
- taglist[0]
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
- taglist = get_elements_by_key(target_str, "INNERTEXT")
257
- taglist[0]
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
- taglist = get_elements_by_key(target_str, "NAME")
261
- taglist[0]
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
- raw_head = @raw_object.head
342
- raw_head ? HTMLElement.new(raw_head, @ie_obj) : nil
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
- HTMLElement.new(@raw_object.body, @ie_obj)
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
- raw_all = @raw_object.all
351
- raw_all ? HTMLElementCollection.new(raw_all, @ie_obj) : nil
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
- return(nil) if index >= @raw_object.Frames.length
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
- raw_element = @raw_object.getElementById(element_id)
365
- raw_element ? HTMLElement.new(raw_element, @ie_obj) : nil
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
- raw_element = @raw_object.documentElement()
370
- raw_element ? HTMLElement.new(raw_element, @ie_obj) : nil
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
- HTMLElementCollection.new(@raw_object.all, @ie_obj)
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
- Document.new(@raw_object.document, @ie_obj)
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
- return(nil) if index >= @raw_object.length
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
- return(nil) if index >= @raw_object.length
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
- return(nil) if index >= @raw_object.length
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
- Document.new(@raw_object.document, @ie_obj)
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.3
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-10-26 00:00:00.000000000 Z
11
+ date: 2014-11-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler