返回列表 上一主題 發帖

[發問] 在網頁抽取資料時遇到「沒有使用權限」的問題

[發問] 在網頁抽取資料時遇到「沒有使用權限」的問題

本帖最後由 小俠客 於 2016-12-8 10:33 編輯

以下是我在網站抽取資料時用的CODE
  1. Sub test()
  2. Dim http As Object, i As Integer

  3. Set http = CreateObject("InternetExplorer.Application")

  4. With http

  5. For i = 1 To 100

  6.     .Navigate "http://www.hkexnews.hk/sdw/search/search_sdw.asp"
  7.     .Visible = True
  8.     Do While .readyState <> 4
  9.         DoEvents
  10.     Loop
  11.    
  12.     .document.getelementbyid("ddlShareholdingDay").Value = 30
  13.     .document.getelementbyid("ddlShareholdingMonth").Value = 11
  14.     .document.getelementbyid("ddlShareholdingYear").Value = 2016
  15.     .document.getelementbyid("txtStockCode").Value = Format(Cells(i, 1), "00000")
  16.     .document.getelementbyid("btnSearch").Click
  17.    
  18.    
  19.     Do Until InStr(.document.body.innerhtml, "pnlResult") > 0
  20.         DoEvents
  21.     Loop
  22.     Set A = .document.getelementbyid("pnlResult")

  23.     Do Until InStr(result, "Remarks:") > 0
  24.     DoEvents
  25.     result = A.innerhtml
  26.     Loop

  27. Debug.Print Cells(i, 1)

  28. Next i

  29. End With

  30. End Sub
複製代碼
最初運行是沒有問題,但當我的LOOPING行了十多次後,我就會遇到ERROR,說我「沒有使用權限」,然後程式便在「Set A = .document.getelementbyid("pnlResult")」停止。如果我在此時按F8,程式是可以繼續運行。
於是我在想是不是因為我的上一句:「.document.getelementbyid("btnSearch").Click」,網頁redirect到結果網頁,需要時間產生html code,導致我行 set A那一句時,網頁還沒有pnlResult的item。於是我便加上了:
  1.     Do Until InStr(.document.body.innerhtml, "pnlResult") > 0
  2.         DoEvents
  3.     Loop
複製代碼
先檢查html code中有沒有「pnlResult」才set A,可是問題仍然存在,我仍然需要人手重啟程式。請問各位有沒有方法解決?謝謝大家。

test.zip (14.79 KB)

本帖最後由 小俠客 於 2016-12-13 10:56 編輯
回復  小俠客
stillfish00 發表於 2016-12-8 13:45



    沒想到原來可以用ERROR HANDLING的方法,謝謝大大。但我使用error handle時因為下面的小問題而出錯,所以我只能用sleep的方法,沒有用error handle
一個小問題,如果程式尋找沒有資料的編號,例如:「820」,網頁會有pop-up msgbox說:「Stock code 820 does not exist ... 」,所以我想先檢查html有沒有「does not exist 」的字眼,如果有我便跳到下一隻。
但可能因為pop-up msgbox的關係,我下一個loop走到「.Navigate "http://www.hkexnews.hk/sdw/search/search_sdw.asp"」時會顯示「-2147024726   VBAProject    'Navigate' 方法 ('IWebBrowser2' 物件) 失敗」
  1. Sub test()
  2. Dim http As Object, i As Integer

  3. Set http = CreateObject("InternetExplorer.Application")

  4. With http

  5. For i = 1 To 100

  6.     .Navigate "http://www.hkexnews.hk/sdw/search/search_sdw.asp"
  7.     .Visible = True
  8.     Do While .readyState <> 4
  9.         DoEvents
  10.     Loop
  11.    
  12.     .document.getelementbyid("ddlShareholdingDay").Value = 30
  13.     .document.getelementbyid("ddlShareholdingMonth").Value = 11
  14.     .document.getelementbyid("ddlShareholdingYear").Value = 2016
  15.     .document.getelementbyid("txtStockCode").Value = Format(Cells(i, 1), "00000")
  16.     .document.getelementbyid("btnSearch").Click

  17.    sleep 2000

  18.                 result = http.document.body.innerhtml
  19.                
  20.                 If InStr(result, "Network Error") > 0 Then
  21.                     MsgBox "Website error"
  22.                     GoTo out
  23.                 End If
  24.                
  25.                 If InStr(result, "does not exist OR not available for enquiry") > 0 Then
  26.                     GoTo nextd
  27.                 End If
  28.    
  29.     Do Until InStr(result , "pnlResult") > 0
  30.         DoEvents
  31.     Loop
  32.     Set A = .document.getelementbyid("pnlResult")
  33.    result = A.innerhtml

  34.     Do Until InStr(result, "Remarks:") > 0
  35.     DoEvents
  36.     result = A.innerhtml
  37.     Loop

  38. Debug.Print Cells(i, 1)

  39. Next i

  40. End With

  41. End Sub
複製代碼
請問有沒有方法關掉IE的pop-up msgbox?謝謝

TOP

        靜思自在 : 為人處世要小心細心,但不要「小心眼」。
返回列表 上一主題