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