You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于VBA+Selenium的Google搜索结果Href链接爬取异常问题

问题分析与修复方案

原代码无法抓取到目标PDF链接,核心问题出在元素定位、筛选逻辑、资源管理这几个环节,以下是具体问题点和修复方案:

核心问题点

  1. 重复创建浏览器实例:每次循环都初始化新的ChromeDriver,既浪费资源,还会导致多个浏览器窗口残留。
  2. 元素定位错误:原CSS选择器div.yuRUbf.a无法精准定位到搜索结果的链接元素,Google搜索结果的目标链接实际是div.yuRUbf容器下的<a>标签。
  3. 无效的筛选条件:固定判断data-ved属性值,该值是Google动态生成的,每个搜索结果甚至不同搜索请求的数值都不同;且找到第一个匹配项就退出循环,无法获取所有结果。
  4. 页面等待不充分:固定等待1秒可能不足以让搜索结果完全加载,容易出现元素未找到的情况。
  5. 关键词未编码:直接拼接关键词到URL,若包含空格、冒号等特殊字符,会导致请求格式错误。

修复后的代码

Option Explicit

Private chr As Selenium.ChromeDriver

Sub Test()
    Dim i As Long
    Dim lastrow As Long
    Dim mykeyword As String
    Dim Mylinks As Selenium.WebElements
    Dim Mylink As Selenium.WebElement
    
    ' 仅初始化一次浏览器实例
    Set chr = New Selenium.ChromeDriver
    chr.Start
    
    lastrow = Sheet1.Cells(Rows.Count, "A").End(xlUp).Row
    
    For i = 2 To lastrow
        mykeyword = Sheet1.Cells(i, 1).Value
        ' 对关键词做URL编码,处理特殊字符
        mykeyword = WorksheetFunction.EncodeURL(mykeyword)
        chr.Get "https://www.google.com/search?q=" & mykeyword
        
        ' 显式等待搜索结果容器加载完成,最长等待10秒
        chr.WaitUntil ElementIsPresent(By.CssSelector, "div.yuRUbf", 10000)
        
        ' 定位所有搜索结果的链接元素
        Set Mylinks = chr.FindElementsByCss("div.yuRUbf > a")
        
        ' 遍历并筛选目标链接
        For Each Mylink In Mylinks
            ' 筛选包含指定域名且为PDF格式的链接
            If InStr(LCase(Mylink.Attribute("href")), "fagbearing.cc") > 0 And _
               InStr(LCase(Mylink.Attribute("href")), ".pdf") > 0 Then
                Debug.Print Mylink.Attribute("href")
            End If
        Next Mylink
    Next i
    
    ' 循环结束后统一关闭浏览器
    chr.Quit
    Set chr = Nothing
End Sub

关键修改说明

  • 复用浏览器实例:将ChromeDriver的初始化和启动移到循环外,避免重复创建资源,循环结束后统一关闭浏览器。
  • URL编码关键词:用WorksheetFunction.EncodeURL处理关键词,确保特殊字符符合URL格式要求,避免请求报错。
  • 显式等待元素加载:使用WaitUntil ElementIsPresent等待搜索结果容器加载完成,比固定等待更可靠,能适配不同网络速度。
  • 精准定位链接:通过div.yuRUbf > a定位每个搜索结果的链接元素,确保能获取到第一页的所有结果链接。
  • 灵活筛选目标链接:用InStr判断链接是否包含目标域名和PDF后缀,替代原错误的固定属性值判断,可根据需求调整筛选逻辑。

内容的提问来源于stack exchange,提问作者jaga jagga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 01:27:43