2015-08-15 114 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"