如果使用电话号码,则无法通过VBA进行Google搜索 [英] Google search via VBA no results if use a phone number
问题描述
使用以下我在网络上找到的代码,搜索电话号码时不会返回结果,其文字很好,会带回网络链接和标题
Using following code I found on web it does not return results when searching for phone numbers, with text its fine, brings back weblink and title
我注意到,当搜索号码时,在link.className中没有className"r",我该如何解决与电话号码一起使用的问题
I have noticed that when search for number there is no className "r" in link.className, how would I fix to use with phone numbers
Sub XMLHTTP()
Dim url As String, lastRow As Long, i As Long
Dim XMLHTTP As Object, html As Object, objResultDiv As Object, objH3 As Object, link As Object
lastRow = Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To lastRow
url = "https://www.google.co.uk/search?q=03701116565" & "&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")
For Each link In objH3
If link.className = "r" Then
Cells(i, 2) = link.innerText
Cells(i, 3) = link.getelementsbytagname("a")(0).href
DoEvents
End If
Next
Next
End Sub
推荐答案
有一个类名r
.请注意以下几点:
There is a class name r
. Observe the following:
Option Explicit
Public Sub GetLinks()
Dim html As HTMLDocument, links As Object, i As Long, counter As Long
Set html = New HTMLDocument
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "https://www.google.co.uk/search?q=03701116565", False
.send
html.body.innerHTML = StrConv(.responseBody, vbUnicode)
End With
With html
Set links = .querySelectorAll(".r > [href] , .r h3")
End With
For i = 0 To links.Length - 1 Step 2
counter = counter + 1
ActiveSheet.Cells(counter, 1) = links.item(i)
ActiveSheet.Cells(counter, 2) = links.item(i + 1).innerText
Next
End Sub
实际的href
与子a
标记关联,该子标记位于您要按类定位的h3
标题标记元素之前. r
是a
标记的父级的类.
The actual href
is associated with a child a
tag which precedes the h3
header tag element which you are targeting by class. The r
is the class of the parent of the a
tag.
如果要使用后期绑定以及与之类似的方法,则可以使用效率较低的跟随方法.请注意,已选择父div元素,因此对于合格的类,可以访问a
标记和h3
.
If you want to use late bound, and a similar approach to yours, you can use the less efficient following method. Note that the parent div elements are selected so access to the a
tag and h3
are possible for qualifying classes.
Option Explicit
Public Sub GetLinks()
Dim html As Object, i As Long
Dim objResultDiv As Object, objH3 As Object, link As Object
Set html = CreateObject("htmlfile")
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "https://www.google.co.uk/search?q=03701116565", False
.send
html.body.innerHTML = .responseText
End With
Set objResultDiv = html.getElementById("rso")
Set objH3 = objResultDiv.getElementsByTagName("div")
For Each link In objH3
If link.className = "r" Then
i = i + 1
On Error Resume Next
ActiveSheet.Cells(i, 2) = link.getElementsByTagName("a")(0).href
ActiveSheet.Cells(i, 3) = link.getElementsByTagName("h3")(0).innerText
On Error GoTo 0
End If
Next
End Sub
这篇关于如果使用电话号码,则无法通过VBA进行Google搜索的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!