从Internet Explorer获取数据

我正在学习如何从Internet Explorer中提取源数据。 我已经学会了如何从YouTube编码。 但是,当我想修改它来testing另一个网站时,我遇到了一个错误。 任何人都可以提醒一下吗?

经testing的网站: 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 

虽然您对收到的错误不是非常具体,但在我看来,首先会导致问题的是您使用getElementsByName()

getElementsByName()返回具有指定name属性值的节点集合 ,在你的情况下name="q" 。 对于您正在连接的页面,有两个包含name="q"节点,您可以使用以下语句进行validation:

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

find的第一个节点似乎是移动用户的search框。 第二个是桌面用户的search框。 所以,如果你想改变其中一个节点的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"