網頁抓取的過程中經常會出現各種各樣的問題,今天就按鈕選擇及下拉式選單碰到的問題略作解釋。

按鈕選擇問題:

Sub NewUpdatedata() ‘
Dim ur As String, b, ie As Object


ur = "http://abc.com/"

Set ie = CreateObject("internetexplorer.application") '使用此方式可以免除 "設定引用項目"

With ie
    .Visible = False 'True為開啟ie, False為不開啟ie
    .Navigate ur
    Do While .ReadyState <> 4 '等待網頁開啟
        DoEvents
    Loop

Application.Wait (Now + TimeValue("0:00:8"))

一般的抓網頁程式碼,set ie object,loop之後要加個等待時間,有時轉換頁面或按鈕會牽涉到龐大的資料量,

需要有足夠的靜止時間,

.Document.getElementByID(“XXXX”).Click

再查找相對應的按鍵的名稱,如果找到ID就更方便,在之前的with裡面接著輸入.Click,

等待時間加上.Click應該可以解決問題。

下拉式選單(dropdown menu)問題:

反而下拉式選單更麻煩一點,不像前面的click就改變頁面,出現需要的資訊。用debug.print看過,明明裡面的值改變了,明明選項的值改變了,但是相對應的資訊卻沒有跑出來,類似的感覺就是你選了頁面,卻沒有按確定鍵。

這個時候我們需要再宣告一個object b進行操作。因為沒有特定id只好從ClassName著手,在第0個位置找到目標,

Set b = .Document.getElementsByClassName(“form-control font-weight-bold”)(0) ‘下拉式選單

Dim event_onChange As Object
Set event_onChange = .Document.createEvent(“HTMLEvents”)
event_onChange.initEvent “change”, True, False

b.selectedIndex = 1
b.FireEvent “onchange”
b.dispatchEvent event_onChange

然後再下面再宣告一個叫onChange的object進行event操作,

b.selectedIndex為不同下拉選項的值,例如”a,1,2,m”等等,需要的資訊應該會跑出來。

難題解決:

最後再按一貫的方法把Hyperlink裡面的值丟到Excel的儲存格裡面,至此,應該可以解決按鈕或者下拉式選單最常碰到的問題。

Set a = .Document.getElementsByTagname(“td”)

 y = 1

 For Each Hyperlink In a


 Cells(y, 1) = Hyperlink.INNERTEXT

   If Cells(y, 1) <> 0 Then
     y = y + 1
       End If
 Next
 End With
    
    ie.Quit
   
End Sub