2015-08-15 112 views
1

我正在學習如何從Internet Explorer中提取源數據。我已經學會了如何從YouTube編碼。但是,當我想修改它來測試另一個網站時,我遇到了一個錯誤。任何人都可以提醒一下嗎?從Internet Explorer獲取數據

測試網站:http://www.oxforddictionaries.com

Sub clickFormbutton() 


Dim ie As Object 
Dim form As Variant, button As Variant 


Set ie = CreateObject("InternetExplorer.Application") 


input1 = InputBox("Please enter keyword.") 


With ie 

.Visible = True 
.navigate ("http://www.oxforddictionaries.com") 


While ie.ReadyState <> 4 
DoEvents 
Wend 


ie.document.getelementsbyname("q").Item.innertext = input1 


Set form = ie.document.getElementsbytagname("form") 

Set button = form(0).onsubmit 


form(0).submit 


Do While ie.busy: DoEvents: Loop 

Set TDelements = .document.getElementsbytagname("td") 
r = 0 
c = 0 

For Each TDelement In TDelements 
Sheet1.Range("A1").Offset(r, c).Value = TDelement.innertext 
r = r + 1 
Next 





End With 

Set ie = Nothing 





End Sub 
+0

你能告訴我們錯誤是什麼嗎?請編輯您的問題幷包含錯誤。 –

+0

錯誤是運行時錯誤'91':對象變量或未設置塊變量 – user3045580

回答

0

雖然你不是很具體的關於您收到的錯誤,在我看來這是要引起你的問題的第一件事是你的方式」重新使用getElementsByName()

getElementsByName()返回具有指定name屬性值節點的集合,你的情況name="q"。對於你和接口的頁面,有包含name="q",你可以用下面的語句驗證節點:

MsgBox ie.document.getElementsByName("q").length ' => Reports "2" 

發現的第一個節點似乎是移動用戶的搜索框。第二個是桌面用戶的搜索框。所以,如果你想改變這些節點之一的innerText,你需要通過指數來解決單個節點:

Dim e 
Set e = ie.document.getElementsByName("q")(0) ' Get first instance 
Set e = ie.document.getElementsByName("q")(1) ' Or, get second instance 
e.innerText = "some text" 

然而,這給我們帶來了您的下一個問題。這些元素是<input>元素,因此設置innerText對你沒有任何好處。我猜你想要做的是設置他們的value,你可以這樣做:

Set e = ie.document.getElementsByName("q")(1) ' Get desktop search box 
e.Value = "some text"