在IE中使用Excel中的VBA到Googlesearch并返回第一个结果的超链接
我一直在试图使用IE自动化谷歌searchExcel中的文本string。 我想要返回excel中另一个单元格的第一个结果的网站的超链接。 这可能吗? 我有一个60,000条logging的列表,我需要谷歌search,并在第一个结果中返回网站的超链接。 有没有其他的方法可以推荐? 我感谢提前的帮助。
由于其60,000条logging我build议使用xmlHTTP对象,而不是使用IE。
HTTP请求更容易,而且要快得多
在这里下载示例文件
Sub XMLHTTP() Dim url As String, lastRow As Long Dim XMLHTTP As Object, html As Object, objResultDiv As Object, objH3 As Object, link 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("rso") Set objH3 = objResultDiv.getelementsbytagname("H3")(0) Set link = objH3.getelementsbytagname("a")(0) str_text = Replace(link.innerHTML, "<EM>", "") str_text = Replace(str_text, "</EM>", "") Cells(i, 2) = str_text Cells(i, 3) = link.href 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
HTH
桑托斯
链接似乎一直在H3标签内。 通常情况下,您可以使用类似下面的内容来检查,直到页面已经加载:
Private Declare Sub Sleep Lib "kernel32" (ByVal nMilliseconds As Long) Sub UseIE() Dim ie As Object Dim thePage As Object Dim strTextOfPage As String Set ie = CreateObject("InternetExplorer.Application") 'ie.FullScreen = True With ie '.Visible = True .Navigate "http://www.bbc.co.uk" While Not .ReadyState = READYSTATE_COMPLETE '4 Sleep 500 'wait 1/2 sec before trying again Wend End With Set thePage = ie.Document 'more code here End Sub
但是,我会反复尝试使用getElementsByTagName("H3")
来引用第一个H3中的A元素,获取这些元素中的第一个,然后查看A-link和它的href属性。
在JavaScript中,引用不存在的元素的尝试将返回undefined
但从VBA它可能需要error handling代码。
一旦我已经获得了HREF,我会停止导航(不知道这个命令,可能ie.Stop
)或立即导航到下一页。
然而,第一个链接通常是赞助链接,而且返回的href有点乱码。 这些赞助链接的文本似乎包括电子标签。 我可能会使用这些信息来放弃这些链接,并进一步查看页面。
我不知道是否有更好的方法来做到这一点。