Board logo

標題: 在 windows7 環境抓不到資料?? [打印本頁]

作者: t8899    時間: 2015-3-5 07:02     標題: 在 windows7 環境抓不到資料??

本帖最後由 t8899 於 2015-3-5 07:04 編輯

office 2003
在windows xp 下一切正常
在windows 7抓不到資料???(但如用F8,單步執行則抓的到)
測驗發現在 .Document.BODY.innerHTML = .Document.getElementsByTagName("table")(4).outerHTML 抓不到資料
[attach]20368[/attach]
作者: GBKEE    時間: 2015-3-5 08:51

回復 1# t8899
試試看
  1. Do While .Document.getElementsByTagName("table")(4).outerHTML = "": Loop
  2.         .Document.BODY.innerHTML = .Document.getElementsByTagName("table")(4).outerHTML
複製代碼

作者: t8899    時間: 2015-3-5 14:19

回復  t8899
試試看
GBKEE 發表於 2015-3-5 08:51


有時可以,有時又不可以
不可以的次數較多!
作者: GBKEE    時間: 2015-3-6 09:19

回復 3# t8899
再試試看
  1. Option Explicit
  2. Sub ABC123()
  3.     Dim XDate As Date, A As Object
  4.     Application.ScreenUpdating = False
  5.     Sheets("3").Select
  6.     XDate = Date
  7.     With CreateObject("InternetExplorer.Application")
  8.         .Visible = False
  9.         .Navigate "http://www.twse.com.tw/ch/trading/exchange/MI_INDEX/MI_INDEX.php"
  10. 330:
  11.         Do While .Busy Or .readyState <> 4: DoEvents: Loop
  12.             .Document.ALL("qdate").Value = Format(XDate, "E/MM/DD")  '日期可修改
  13.             .Document.ALL("selectType").Value = "ALLBUT0999"
  14.             .Document.ALL("query-button").Click
  15.         Do While .Busy Or .readyState <> 4: DoEvents: Loop
  16.         If InStr(.Document.BODY.innerText, "查無資料") Then
  17.             XDate = XDate - 1
  18.             GoTo 330
  19.         End If
  20.         Do
  21.             Set A = .Document.getElementsByTagName("table")
  22.         Loop Until A.Length = 6
  23.         .Document.BODY.innerHTML = A(4).outerHTML
  24.         Do While .Busy Or .readyState <> 4: DoEvents: Loop
  25.         .ExecWB 17, 2       '  Select All
  26.         .ExecWB 12, 2       '  Copy selection
  27.         With Sheets("3")    '可指定工作表
  28.             .UsedRange.Clear
  29.             .Range("A1:P1000").ClearContents
  30.             .Range("A2").Select
  31.             .PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:=False, NOHTMLFormatting:=True
  32.         End With
  33.         .Quit        '關閉網頁
  34.     End With
  35. End Sub
複製代碼

作者: t8899    時間: 2015-3-6 12:46

回復  t8899
再試試看
GBKEE 發表於 2015-3-6 09:19

是沒問題了
但資料的日期偶而會抓到 前1日
今日尚未收盤,應抓到 3/5 , 試5次有1次抓到3/4
作者: GBKEE    時間: 2015-3-6 14:06

回復 5# t8899

程式跑的比IE下載資料速度快,只好等它一下
  1. Application.Wait Time + #12:00:01 AM#  '慢慢地一秒一秒加上直到正常為止
  2.         Do
  3.             Set A = .Document.getElementsByTagName("table")
  4.         Loop Until A.Length = 6
複製代碼

作者: t8899    時間: 2015-3-6 14:26

本帖最後由 t8899 於 2015-3-6 14:28 編輯
回復  t8899

程式跑的比IE下載資料速度快,只好等它一下
GBKEE 發表於 2015-3-6 14:06


謝謝指導!
這行不是解決這種問題??  Do While .Busy Or .readyState <> 4: DoEvents
作者: GBKEE    時間: 2015-3-6 14:46

回復 7# t8899

這行不是解決這種問題??  Do While .Busy Or .readyState <> 4: DoEvents

應該是的,但它不行也沒輒ㄚ
作者: t8899    時間: 2015-3-7 07:29

本帖最後由 t8899 於 2015-3-7 07:31 編輯
回復  t8899

程式跑的比IE下載資料速度快,只好等它一下
GBKEE 發表於 2015-3-6 14:06

我剛發現
Application.Wait Time + #12:00:01 AM#
應該加在   If InStr(.Document.BODY.innerText, "查無資料") Then  的前面 才對?




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)