【微信自动化】第三节:抓取微信通讯录

环境:windows11 64 位、Visual Studio 2022、.NET6.0
本系列文章仅用于学习winform及UI自动化技术,不涉及任何软件、程序破解,请勿用于非法用途


效果演示

在这里插入图片描述


`

抓取思路

先通过使用FlaUInspect分析下窗体元素结构:
在这里插入图片描述

我们可以根据“Text”关键字定位元素,进而提取到关键信息

核心代码

/// <summary>
/// 循环读取联系人
/// </summary>
/// <param name="action">每次读取到联系人</param>
/// <returns>完整的联系人集合</returns>
public List<Contacts> LoopReadContactsDetail(Action<Contacts> action)
{
    List<Contacts> contacts = new List<Contacts>();
    SwitchingModule(WeChatModuleEnums.AddressBook);

    var list = GetContactsElement();
    if (list != null)
    {
        var pattern = list.Patterns.Scroll.Pattern;
        list.AsListBox().FindFirstChild(x => x.ByName("新的朋友")).Click();
        double d = 0;
        while (true)
        {
            if (d > 0 && d == pattern.VerticalScrollPercent.ValueOrDefault)
            {
                break;
            }
            else
            {
                d = pattern.VerticalScrollPercent.ValueOrDefault;
            }
            Keyboard.Type(VirtualKeyShort.DOWN);
            Thread.Sleep(100);
            Contacts? c = GetContactsDetail();
            if (c != null)
            {
                action?.Invoke(c);
                contacts.Add(c);
            }
        }
        pattern.SetScrollPercent(1, 0);
    }
    return contacts.Distinct().Where(x => x != null).ToList();
}
/// <summary>
/// 切换到指定模块
/// </summary>
/// <param name="moduleEnum">目标模块</param>
/// <returns></returns>
public bool SwitchingModule(WeChatModuleEnums moduleEnum)
{
    this.EnsureWindowVisibleAndFocused();
    GetToolBar()?.FindChildAt((int)moduleEnum)?.Click();
    switch (moduleEnum)
    {
        case WeChatModuleEnums.Chat:
            {
                var element = GetMainPanel()?.FindFirstByXPathSafe(weChatDriveConfig.NavbarChatXPath);
                if (element != null)
                {
                    element.Patterns.Scroll.Pattern.SetScrollPercent(1, 0);
                    return true;
                }
                else
                {
                    log.Warn($"{weChatDriveConfig.NavbarChatXPath}未找到");
                }
                return false;
            }
        case WeChatModuleEnums.AddressBook:
            {
                var element = GetMainPanel()?.FindFirstByXPathSafe(weChatDriveConfig.NavbarContactsXPath);
                if (element != null)
                {
                    element.Patterns.Scroll.Pattern.SetScrollPercent(1, 0);
                    return true;
                }
                else
                {
                    log.Warn($"{weChatDriveConfig.NavbarContactsXPath}未找到");
                }
                return false;
            }
        default:
            break;
    }
    return false;
}
/// <summary>
/// 读取联系人详情信息
/// </summary>
public Contacts? GetContactsDetail()
{
    AutomationElement? element = GetMainPanel();
    if (element == null)
    {
        return null;
    }
    if (element.FindFirstDescendant(x => x.ByName("微信号:")) == null)
    {
        return null;
    }
    Contacts contacts = new Contacts();
    contacts.Nickname = ReadTextNextText(element, "昵称:");
    contacts.WeChatId = ReadTextNextText(element, "微信号:");
    contacts.Label = ReadTextNextText(element, "标签");
    contacts.Remark = ReadTextNextText(element, "备注");
    contacts.Phone = ReadTextNextText(element, "电话");
    contacts.Area = ReadTextNextText(element, "地区:");
    contacts.Source = ReadTextNextText(element, "来源");
    contacts.PersonalSignature = ReadTextNextText(element, "个性签名");
    return contacts;
}

沟通交流

欢迎评论、私信。

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搬砖赚钱养家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值