2015-12-16 119 views
2

我得到运行时错误91对象或块变量没有设置为<下面的行 - 这里错误!运行时错误424对象要求

Set html = CreateObject("htmlfile") 
    html.body.innerHTML = XMLHTTP.ResponseText 
    Set objResultDiv = html.getElementById("rhs_block")(0) ' <- Error Here!! 
    Set objH3 = objResultDiv.getElementsByTagName("div")(7).getElementsByTagName("a")(2).getElementsByTagName("span")(0).innerHTML 
    Cells(i, 2) = objH3 

我在Stackoverflow中搜索,但还没有找到答案。

完整的VBA代码:

Sub XMLHTTP() 

Dim url As String, lastRow As Long 
Dim XMLHTTP As Object, html As Object, objResultDiv As Object, objH3 As Object 
Dim start_time As Date 
Dim end_time As Date 
lastRow = Range("A" & Rows.Count).End(xlUp).Row 
Dim cookie As String 
Dim result_cookie As String 
start_time = Time 
Debug.Print "start_time:" & start_time 

For i = 2 To lastRow 

    url = "https://www.google.co.in/search?q=" & Cells(i, 1) & "&rnd=" & WorksheetFunction.RandBetween(1, 10000) 

    Set XMLHTTP = CreateObject("MSXML2.serverXMLHTTP") 
    XMLHTTP.Open "GET", url, False 
    XMLHTTP.setRequestHeader "Content-Type", "text/xml" 
    XMLHTTP.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0" 
    XMLHTTP.send 

    Set html = CreateObject("htmlfile") 
    html.body.innerHTML = XMLHTTP.ResponseText 
    Set objResultDiv = html.getElementById("rhs_block")(0) 
    Set objH3 = objResultDiv.getElementsByTagName("div")(7).getElementsByTagName("a")(2).getElementsByTagName("span")(0).innerHTML 
    Cells(i, 2) = objH3 
    DoEvents 
Next 

    end_time = Time 
    Debug.Print "end_time:" & end_time 
    Debug.Print "done" & "Time taken : " & DateDiff("n", start_time, end_time) 
    MsgBox "done" & "Time taken : " & DateDiff("n", start_time, end_time) 
End Sub 

enter image description here

+0

因此,您已经检查并且在hte元素中至少有8个DIV使用** rhs_block ** ID,并且在第八个DIV中至少有3个As和第三个至少有一个SPAN,该跨度有文本。正确? – Jeeped

+0

'getElementById'不返回集合。它应该只返回一个元素。你不需要'(0)'。 – Jeeped

+0

你是否得到运行时错误424或91? – blckbird

回答

0

html页面上的元素ID必须是唯一的(否则它不会是一个 “标识”)。所以一个ID只能附加到一个元素上。但是,浏览器不会检查此内容,因此请忽略HTML文件中的错误。

无论如何为您的JavaScript函数getElementById()这意味着它将只返回一个单一的元素。 您需要更改:

Set objResultDiv = html.getElementById("rhs_block")(0) 

Set objResultDiv = html.getElementById("rhs_block") 

然后你objResultDiv不应再抛出运行时错误91

BTW,还有的JavaScript函数用于返回元素的数组。类似于getElementsByTagName("p")(返回带有段落标签的所有元素)或getElementsByName("test123")(返回所有包含name="test123"的元素)。

您可以从函数名称中判断是否返回单个或多个元素。 (getElementById vs. getElement s ByName)

+0

是的,我知道了。谢谢 – user2269164

+0

@ user2269164如果这对你有所帮助,请注册并接受为答案。 – blckbird

相关问题