iegrip 0.1.3 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
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