• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

lichao7314

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

(4)PC端微信UI自动化-微信联系人采集(C#)

​

 在进行一系列操作之前,我们需要采集到微信中的联系人和群聊信息

软件运行效果演示

67ea21fa28f642aeb43f93acbd868f89-00002.jpg?auth_key=4852444553-0-0-1c75153a8ceb13d857964889610f2b89


 

 接下来我们如何采集到微信中的联系人列表呢?

(1)找到通讯录按钮UI元素执行点击操作。

(2)找到联系人面板并执行面板滚动操作

(3)滚动过程中获取面板List对象中的ListItem项中的各个子元素

(1)找到通讯录的按钮元素,发送点击事件将通讯录面板置为选中状态

​编辑

通过UI元素路径查找到了通讯录UI对象,并执行点击事件。

   private void ClickContacts()
        {
             //通过XPATH找到通讯录按钮
            var ele = UI_WX_Window.Current.Find("/Pane[2]/Pane[1]/Button[3]");
            //发送点击事件
            UI_WX_Window.Current.ClickElement(ele);
        }

/Pane[2]/Pane[1]/Button[3]是XPath表达式,等于通讯录按钮在窗体中的路径。

然后发送点击事件,将联系人面板展示出来。

(2)当通讯录面板置为焦点后,微信的联系人信息全部在一个List滚动面板中。

我们通过XPATH方式找到联系人List面板的对象。

 var list = UI_WX_Window.Current.Find("/Pane[2]/Pane[2]/Pane[2]/Pane/List");

接下来我们通过以下代码获取当前可视区域的联系人

 //获取当前可视区域的联系人
  private void GetWXContact()
        {
            UI_WX_Window.Current.Focus();

            var list = UI_WX_Window.Current.Find("/Pane[2]/Pane[2]/Pane[2]/Pane/List");

            if (list != null)
            {
                 //获取联系人面板中所有的子控件
                var child = list.FindAllChildren();
                //遍历控件数
                foreach (var item in child)
                {
                    var wxName = item.Name;

                    if (!Contacts.Contains(wxName) && wxName != "新的朋友" && wxName != "公众号")
                    {
                        Contacts.Add(wxName);
                        Log.WXLog.Current.Log(wxName);
                    }
                }
            }
        }

将联系人List面板中的子控件全部遍历出来并将ListItem中的联系人获取出来。

执行完代码后我们会发现如果我们的联系人面板出现滚动条后,遍历出来的控件只能获取到窗体视觉区域内的联系人。那么我们需要控制滚动条自动滚动,并循环调用GetWXContact()方法来获取联系人。

  //获取联系人面板
            var list = UI_WX_Window.Current.Find("/Pane[2]/Pane[2]/Pane[2]/Pane/List");

            if (list != null)
            {
                //开启一个线程控制联系人滚动面板进行滚动
                Thread th = new Thread(new ThreadStart(() =>
                {
                    int i = 0;

                    while (true)
                    {
                        //获取滚动面板的视图
                        var contactScroll = list.Patterns.Scroll.Pattern;

                        //VerticalViewSize为当前可视区域在整个滚动面板滚动区域高度中的比例 
                        var scroll = contactScroll.VerticalViewSize * i;

                        if (scroll > 0)
                        {
                            //如果滚动比例达到100%设置为1
                            scroll = 0;
                        }

                        //使用flaui组件将滚动面板的视图设置到滚动的位置
                        contactScroll.SetScrollPercent(1, scroll); 

                        //滚动完成后在继续获取联系人
                        GetWXContact(); 

                        i++; 
                    }
                }));
                th.Start();
            }

通过上述的代码就能将我们微信中的联系人和群信息全部采集出来!

 

上一篇(3)微信UI自动化-热键管理(C#)

下一篇(5)微信UI自动化-实现静默鼠标点击(C#)

因为文章所表达的意思可能无法满足每一位阅读需求,需要源码或者支持请联系作者QQ 978124155

​

posted on 2023-11-02 14:22  小耕养了只喵大仙  阅读(509)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3