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

使用Selenium和.NET读取WhatsApp消息的可行性及实现方案咨询

可以用Selenium实现WhatsApp Web消息读取(.NET/C#)

完全可以通过Selenium实现WhatsApp Web的消息读取需求,核心思路是利用Selenium定位页面上的消息元素,提取文本、发送方、时间戳等信息用于备份。以下是具体实现思路和代码示例:

核心实现步骤

  • 启动ChromeDriver并打开WhatsApp Web页面,首次需手动扫码登录,后续可通过保存Chrome用户数据维持登录状态
  • 定位目标聊天窗口(通过联系人/群组名称、元素选择器等方式)
  • 定位聊天区域内的消息元素,提取关键信息
  • 处理滚动加载:WhatsApp Web会按需加载历史消息,需模拟滚动操作获取更早的记录

.NET/C# 代码示例

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
using System;
using System.Collections.Generic;
using System.Threading;

class WhatsAppMessageBackup
{
    static void Main(string[] args)
    {
        // 配置ChromeDriver,保存用户数据以跳过重复扫码
        var chromeOptions = new ChromeOptions();
        chromeOptions.AddArgument(@"user-data-dir=C:\Your\Chrome\User\Data\Path"); // 替换为你的Chrome用户数据路径
        chromeOptions.AddArgument("--start-maximized");

        using (var driver = new ChromeDriver(chromeOptions))
        {
            driver.Navigate().GoToUrl("https://web.whatsapp.com/");
            
            // 等待页面加载完成(可根据网络情况调整等待时长)
            new WebDriverWait(driver, TimeSpan.FromSeconds(30)).Until(d => d.FindElements(By.CssSelector("div._2vbn4")).Count > 0);
            
            // 定位目标聊天(替换为你要备份的联系人/群组名称)
            var targetChat = driver.FindElement(By.XPath($"//span[@title='目标联系人名称']"));
            targetChat.Click();
            Thread.Sleep(2000); // 等待聊天窗口加载

            // 滚动加载历史消息(循环次数按需调整)
            var chatContainer = driver.FindElement(By.CssSelector("div._2vbn4"));
            for (int i = 0; i < 5; i++)
            {
                // 执行JS滚动到容器顶部触发历史消息加载
                ((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].scrollTop = 0;", chatContainer);
                Thread.Sleep(1500); // 等待消息加载完成
            }

            // 提取所有消息元素
            var messageElements = driver.FindElements(By.CssSelector("div._274yw"));
            var backupList = new List<Dictionary<string, string>>();

            foreach (var msgElement in messageElements)
            {
                var msgData = new Dictionary<string, string>();
                
                // 判断消息发送方
                if (msgElement.GetAttribute("class").Contains("_2vbn4"))
                {
                    msgData["Sender"] = "我";
                }
                else
                {
                    // 群组聊天需提取发送者名称,单聊可注释此段
                    var sender = msgElement.FindElement(By.CssSelector("span._3Whw5"));
                    msgData["Sender"] = sender.Text;
                }
                
                // 提取消息内容
                var content = msgElement.FindElement(By.CssSelector("span.selectable-text"));
                msgData["Content"] = content.Text;
                
                // 提取时间戳
                var timeStamp = msgElement.FindElement(By.CssSelector("span._1VzZY"));
                msgData["Time"] = timeStamp.GetAttribute("title");

                backupList.Add(msgData);
            }

            // 输出备份内容(可替换为写入文件/数据库的逻辑)
            foreach (var msg in backupList)
            {
                Console.WriteLine($"[{msg["Time"]}] {msg["Sender"]}: {msg["Content"]}");
            }

            Console.ReadLine(); // 暂停程序,按需保留会话
        }
    }
}

关键注意事项

  • DOM结构变更:WhatsApp Web的CSS类名(如_2vbn4、_274yw)可能随时更新,若代码失效需重新定位最新元素选择器
  • 反检测限制:避免过于频繁的自动化操作,适当添加等待时间,防止被WhatsApp Web判定为异常登录
  • 依赖安装:需通过NuGet安装Selenium.WebDriver和Selenium.WebDriver.ChromeDriver包
  • 批量备份优化:若需备份大量聊天,可封装聊天选择、消息提取的方法,循环处理多个目标聊天

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:10:28