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

使用Selenium+VBA获取WhatsApp已读回执时遇截图元素超出范围错误

解决WhatsApp网页版已读回执回写Excel的问题及截图错误修复

问题原因

出现Element Out Of The ScreenShot错误,是因为目标元素(双蓝勾已读回执)不在浏览器当前可见视口范围内。WhatsApp网页版的消息区需要激活对应聊天窗口或滚动,才能让已读回执元素显示在屏幕内。

修复方案及优化代码

1. 核心修改点

  • 先激活目标聊天窗口,确保消息区显示对应对话
  • 滚动到目标元素位置,保证元素可见
  • 用显式等待替代固定等待,提升稳定性
  • 可选:直接判断元素状态(无需截图),更高效回写Excel

2. 修改后的VBA代码

Sub CheckWhatsAppReadReceipt()
    Dim bot As New WebDriver
    Dim targetChatName As String
    Dim readReceiptElement As WebElement
    
    ' 设置目标联系人名称,替换成你要检查的联系人
    targetChatName = "测试联系人"
    
    ' 初始化Chrome并打开WhatsApp网页版
    bot.Start "chrome", "https://web.whatsapp.com/"
    bot.Get "/"
    bot.Window.Maximize
    
    MsgBox "请扫码登录,登录完成后点击确定"
    
    ' 显式等待聊天列表加载完成,最多等待10秒
    bot.Wait 10000
    
    ' 定位并点击目标聊天,激活对话窗口
    bot.FindElementByXPath("//span[@title='" & targetChatName & "']").Click
    
    ' 显式等待消息区加载,最多等待5秒
    bot.Wait 5000
    
    ' 定位最新发出消息的已读回执元素
    On Error Resume Next
    Set readReceiptElement = bot.FindElementByXPath("//div[contains(@class,'message-out')]//span[@data-testid='status-dblcheck']")
    On Error GoTo 0
    
    If Not readReceiptElement Is Nothing Then
        ' 滚动到元素位置,确保在视口内
        bot.ExecuteScript "arguments[0].scrollIntoView(true);", readReceiptElement
        
        ' 方案1:截图粘贴到Excel
        readReceiptElement.TakeScreenshot.Copy
        Sheets(1).Cells(5, 5).Paste
        
        ' 方案2:直接判断已读状态(更高效,无需截图)
        ' 获取SVG路径的填充颜色,WhatsApp已读蓝对应的RGB为(37, 211, 102)
        Dim fillColor As String
        fillColor = bot.ExecuteScript("return window.getComputedStyle(arguments[0].querySelector('path')).fill;", readReceiptElement)
        If fillColor = "rgb(37, 211, 102)" Then
            Sheets(1).Cells(5, 6).Value = "已读"
        Else
            Sheets(1).Cells(5, 6).Value = "已发送/未读"
        End If
    Else
        Sheets(1).Cells(5, 5).Value = "未找到已读回执"
    End If
    
    ' 可选:关闭浏览器
    ' bot.Quit
End Sub

3. 关键说明

  • 激活聊天窗口:必须先点击目标联系人的聊天项,否则消息区不会加载该对话的已读回执元素
  • 滚动元素到视口:通过scrollIntoView强制元素进入屏幕可见范围,彻底解决截图时的元素超出视口错误
  • 显式等待:替代固定时长等待,让代码等待页面元素加载完成后再执行,避免因网络或加载慢导致的定位失败
  • 状态判断优化:通过获取SVG路径的填充颜色直接判断已读状态,比截图更高效,且能直接将结果回写到Excel单元格中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:45:39