Board logo

標題: [發問] 請問 如何用 vba 點擊網頁查詢 [打印本頁]

作者: GaryC    時間: 2015-3-25 21:40     標題: 請問 如何用 vba 點擊網頁查詢

本帖最後由 GBKEE 於 2016-2-18 12:54 編輯

網址: http://www.twse.com.tw/ch/tradin ... T/MI_5MINS_HIST.php
<input type=button class="board" value="查詢" onclick="date_form.submit();" >
查詢鈕  無法點擊,跑出的資料非設定的查詢資料,
請教 如何修改下列程式碼

Private Sub Worksheet_Change(ByVal Target As Range)

With Target
If .Row = 8 And .Column = 1 Then
    If .Value <> 10 Then
       Dim A As Object, xDate As Date, EDATE As Date
       Dim myear, mmon
       'myear = Year(Worksheets("匯總").Cells(8, 1)) - 1911
       'mmon = Month(Worksheets("匯總").Cells(8, 1))
    '***********測試用
    '抓到有為止(只抓5天),5天都抓不到也提示
    Worksheets("加權指").Select
    EDATE = Date
    xDate = EDATE
    xDate = Worksheets("匯總").Cells(8, 1)
    '*************
    'xDate = Date    '正式常程式碼
    With CreateObject("InternetExplorer.Application")
        .Visible = True
        .Navigate "http://www.twse.com.tw/ch/trading/indices/MI_5MINS_HIST/MI_5MINS_HIST.php"
        Do While .Busy Or .readyState <> 4: DoEvents: Loop
Ie_Refresh:
        With .Document
            .ALL("myear").Value = Year(xDate) - 1911 '日期可修改
            .ALL("mmon").Value = Format(Month(xDate), "0#")
            .ALL("查詢").Click
            
           
        End With
        Do While .Busy Or .readyState <> 4: DoEvents: Loop
        If InStr(.Document.BODY.innerText, "查無資料") Then
            If xDate >= EDATE Then   '測試用********
            'If xDate + 4 >= Date Then   '正式常程式碼
                Debug.Print xDate       '驗證用 可刪除
                xDate = xDate - 1
                GoTo Ie_Refresh
            End If
             .Quit
            MsgBox Format(xDate, "E/MM/DD") & " 查無資料"
            Exit Sub
           
        End If
        Set A = .Document.GetElementsByTagName("table")
        .Document.BODY.innerHTML = A(10).outerHTML '取最後的一個"table"
        
        Do While .Busy Or .readyState <> 4: DoEvents: Loop
        .ExecWB 17, 2       '  Select All
        .ExecWB 12, 2       '  Copy selection
        '.Quit        '關閉網頁
         With ActiveSheet    '可指定工作表
            .UsedRange.Clear
            .Range("A1").Select
            .PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:=False, NOHTMLFormatting:=True
            Worksheets("匯總").Select
        End With
           End With
    Else: .Offset(0, 1) = ""
    End If
End If
End With
End Sub

作者: GBKEE    時間: 2015-3-26 07:42

回復 1# GaryC
  1. With .Document
  2.             .all("myear").Value = Year(xDate) - 1913 '日期可修改
  3.            MsgBox .getElementsByName("myear")(0).Value
  4.             .all("mmon").Value = Format(Month(xDate) - 1, "0#")
  5.             For Each E In .GetElementsByTagName("INPUT")
  6.                 If E.Value = "查詢" Then E.Click
  7.             Next
  8.         End With
複製代碼
每一個網頁(HTM )的建置都不一樣.
  1. Option Explicit
  2. Sub Ex_網頁元素()
  3.     Dim i As Integer, E As Object
  4.     With CreateObject("InternetExplorer.Application")
  5.         .Visible = True
  6.         .Navigate "http://www.twse.com.tw/ch/trading/indices/MI_5MINS_HIST/MI_5MINS_HIST.php"
  7.         Do While .Busy Or .readyState <> 4: DoEvents: Loop
  8.         With .Document
  9.           '*** 這段程式碼可查看這網頁的元素內容
  10.             On Error Resume Next
  11.             For Each E In .all
  12.                 i = i + 1
  13.                 Cells(i, "a") = E.tagname '使用 .GetElementsByTagName("INPUT")
  14.                 Cells(i, "b") = E.ID      '使用 .GetElementByID("menu")
  15.                 Cells(i, "c") = E.Name    '使用 .all("myear")
  16.                                           '.getElementsByName("myear")(0).Value ' = Year(xDate) - 1911
  17.                                           ' HTML 中通常具有相同的 name 屬性),所有 getElementsByName() 方法返回的是元素的集合,而不是單一個元素。
  18.                 Cells(i, "d") = E.Value
  19.                 Cells(i, "e") = E.innertext
  20.                 Cells(i, "f") = E.Type
  21.                 Cells(i, "g") = E.href
  22.             Next
  23.         End With
  24.     '    .Quit        '關閉網頁
  25.     End With
  26. End Sub
複製代碼

作者: GaryC    時間: 2015-3-26 15:33

回復 2# GBKEE


    多謝大大, 尤其那檢測元素 特別有用, 謝謝 !




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