我修改了在网上找到的代码,以便能够在 HTML 页面上找到 ClassName,并在进行 Google 搜索时返回其文本。我需要为大约 10,000 家公司执行此操作,但是当仅用 100 行测试它时,它可以工作,然后在第 60 行左右停止。之后我无法获得任何结果,并找到解决它的唯一方法是等待大约一个小时然后再次执行它。我在另一台计算机上对此进行了测试,并得到了相同的结果和问题。它与第 60 行中的内容无关,因为每次测试我使用不同的 100 家公司。即使将循环更改为 i = 2 到 101 仍然会导致它出现相同的问题。
Col A 将有一个公司名称,例如:“Buchart Horn”
Col B 返回“马里兰州巴尔的摩的建筑师”
Col C 将是空白的(没关系)
Col D 返回“马里兰州巴尔的摩 - Buchart Horn:工程师、建筑师和规划师”
我对 VBA 非常陌生,因此将不胜感激。谢谢你。
'References enabled:
'Microsoft Internet Controls, Microsoft HTML Object Library
Sub GoogleSearch()
Dim URL As String
Dim objHTTP As Object
Dim htmlDoc As HTMLDocument
Set htmlDoc = CreateObject("htmlfile")
Dim objResults1 As Object
Dim objResults2 As Object
Dim objResults3 As Object
On Error Resume Next
lastRow = Range("A" & Rows.count).End(xlUp).Row
For I = 2 To lastRow
URL = "https://www.google.com/search?q=" & Cells(I, 1)
Set objHTTP = CreateObject("MSXML2.XMLHTTP")
With objHTTP
.Open "GET", URL, False
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.send
htmlDoc.body.innerHTML = .responseText
End With
Set objResults1 = htmlDoc.getElementsByClassName("YhemCb")
Set objResults2 = htmlDoc.getElementsByClassName("wwUB2c kno-fb-ctx")
Set objResults3 = htmlDoc.getElementsByClassName("LC20lb")
Cells(I, 2) = objResults1(0).innerText
Cells(I, 3) = objResults2(0).innerText
Cells(I, 4) = objResults3(0).innerText
Next
Set htmlDoc = Nothing
Set objResults1 = Nothing
Set objResults2 = Nothing
Set objResults3 = Nothing
Set objHTTP = Nothing
End Sub