Excel VBA调试,对象不支持此属性

Excel VBA调试,对象不支持此属性,excel,vba,debugging,web-scraping,Excel,Vba,Debugging,Web Scraping,我对VBA和堆栈溢出非常陌生。我正在开发一个vba,它从中国搜索引擎百度.com获取前5个URL链接。但是有一些错误,我看了一天也解决不了。请给我一些帮助 Sub GettingURL() Application.ScreenUpdating = False With CreateObject("InternetExplorer.Application") .Visible = True .navigate "https://baidu.com/

我对VBA和堆栈溢出非常陌生。我正在开发一个vba,它从中国搜索引擎百度.com获取前5个URL链接。但是有一些错误,我看了一天也解决不了。请给我一些帮助

Sub GettingURL()

    Application.ScreenUpdating = False
    With CreateObject("InternetExplorer.Application")
        .Visible = True
        .navigate "https://baidu.com/s?wd=" & Sheets("Data").Cells(1, 2).Text
        While .Busy Or .readyState < 4:  DoEvents:  Wend

        With .document.all.ires.getElementsByTagName("A")
            c = 3
            For u = 0 To Application.Min(8, .Length - 1) Step 2
                Sheets("Data").Cells(c, 1) = .Item(u).href
                c = c + 1
            Next
        End With
        .Quit
    End With
    Application.ScreenUpdating = True
End Sub
Sub-GettingURL()
Application.ScreenUpdating=False
使用CreateObject(“InternetExplorer.Application”)
.Visible=True
.导航“https://baidu.com/s?wd=表格(“数据”)。单元格(1,2)。文本
当.Busy或.readyState<4:DoEvents:Wend时
With.document.all.ires.getElementsByTagName(“A”)
c=3
对于u=0至应用程序。最小(8,.长度-1)步骤2
表格(“数据”)。单元格(c,1)=。项目(u)。href
c=c+1
下一个
以
退出
以
Application.ScreenUpdating=True
端接头

tl;博士

所以,这一直困扰着我,直到。。。。。。。我想如果HTML中的链接最终在指向页面的方向上出现不同的结果会怎样

因此,虽然从技术上讲不是前5个元素(因为第5个元素的页面样式不一致;它缺少一个h3标记),但当您查看最终URL时,这似乎与注释中给定的列表相匹配


CSS选择器组合:

我使用CSS选择器组合来定位
#content_left h3[href]
的页面。这将在id为
content\u left
的元素中的父
h3
元素中查找具有
href
属性的元素

这就是CSS查询与搜索词
red
的匹配情况。(提供样本)


VBA:

您可以通过
document
querySelectorAll
方法应用CSS选择器组合,因为您需要多个匹配的元素,这将返回一个静态
节点列表。循环返回的
节点列表的
.Length
,按索引访问项目

Option Explicit
Public Sub GettingURL()
    Dim c As Long, u As Long
    Application.ScreenUpdating = False
    With CreateObject("InternetExplorer.Application")
        .Visible = True
        .navigate "https://baidu.com/s?wd=" & Sheets("Data").Cells(1, 2).Text
        While .Busy Or .readyState < 4:  DoEvents:  Wend

        With .document.querySelectorAll("#content_left h3 [href]")
            c = 3
            For u = 0 To 4                       ' Application.Min(8, .Length - 1)
                Sheets("Data").Cells(c, 1) = .Item(u)
                c = c + 1
            Next
        End With
        .Quit
    End With
    Application.ScreenUpdating = True
End Sub
选项显式
公共子GettingURL()
c长,u长
Application.ScreenUpdating=False
使用CreateObject(“InternetExplorer.Application”)
.Visible=True
.导航“https://baidu.com/s?wd=表格(“数据”)。单元格(1,2)。文本
当.Busy或.readyState<4:DoEvents:Wend时
With.document.querySelectorAll(“#content_left h3[href]”)
c=3
对于u=0至4'的应用,最小(8,.长度-1)
表格(“数据”)。单元格(c,1)=项目(u)
c=c+1
下一个
以
退出
以
Application.ScreenUpdating=True
端接头

结果:

将检索到的URL与它们最终显示的内容进行比较,如果在导航栏中输入它们,则会得到以下结果:


tl;博士

所以,这一直困扰着我,直到。。。。。。。我想如果HTML中的链接最终在指向页面的方向上出现不同的结果会怎样

因此,虽然从技术上讲不是前5个元素(因为第5个元素的页面样式不一致;它缺少一个h3标记),但当您查看最终URL时,这似乎与注释中给定的列表相匹配


CSS选择器组合:

我使用CSS选择器组合来定位
#content_left h3[href]
的页面。这将在id为
content\u left
的元素中的父
h3
元素中查找具有
href
属性的元素

这就是CSS查询与搜索词
red
的匹配情况。(提供样本)


VBA:

您可以通过
document
querySelectorAll
方法应用CSS选择器组合,因为您需要多个匹配的元素,这将返回一个静态
节点列表。循环返回的
节点列表的
.Length
,按索引访问项目

Option Explicit
Public Sub GettingURL()
    Dim c As Long, u As Long
    Application.ScreenUpdating = False
    With CreateObject("InternetExplorer.Application")
        .Visible = True
        .navigate "https://baidu.com/s?wd=" & Sheets("Data").Cells(1, 2).Text
        While .Busy Or .readyState < 4:  DoEvents:  Wend

        With .document.querySelectorAll("#content_left h3 [href]")
            c = 3
            For u = 0 To 4                       ' Application.Min(8, .Length - 1)
                Sheets("Data").Cells(c, 1) = .Item(u)
                c = c + 1
            Next
        End With
        .Quit
    End With
    Application.ScreenUpdating = True
End Sub
选项显式
公共子GettingURL()
c长,u长
Application.ScreenUpdating=False
使用CreateObject(“InternetExplorer.Application”)
.Visible=True
.导航“https://baidu.com/s?wd=表格(“数据”)。单元格(1,2)。文本
当.Busy或.readyState<4:DoEvents:Wend时
With.document.querySelectorAll(“#content_left h3[href]”)
c=3
对于u=0至4'的应用,最小(8,.长度-1)
表格(“数据”)。单元格(c,1)=项目(u)
c=c+1
下一个
以
退出
以
Application.ScreenUpdating=True
端接头

结果:

将检索到的URL与它们最终显示的内容进行比较,如果在导航栏中输入它们,则会得到以下结果:


谢谢回复,当我将搜索引擎改为google(将“”改为“www.google.co.in/search?q=”)时,此代码非常有效。我正在尝试在搜索一个单词后从搜索引擎获取前5个URL。例如,如果我搜索“red”,它将返回“”、“”和“”我无法将你的确切链接与我获得的html匹配,可能是因为我的地理位置。你能分享你所针对的几个元素的html吗?我可以,例如:获得;fanyi.baidu.com;;music.163.com;baike.baidu.com/;我还可以获得包含字符串的结果,例如:绿色链接,可以通过.document.querySelectorAll(“.c-showurl”)哪一行出现错误?感谢您的回复,当我将搜索引擎改为google(将“”改为“www.google.co.in/search?q=”)时,此代码可以完美地工作。我正在尝试在搜索一个单词后从搜索引擎获取前5个URL。例如,如果我搜索“red”,它将返回“”,,,,,,和