(12)PC端微信自动化测试-C#采集微信聊天记录

上一篇文章介绍了微信UI自动化-微信窗口跟随主窗体移动(C#)

最近也一直没有更新过这块,近期很多朋友咨询我能不能用自动化测试工具获取微信的聊天记录,所以抽空实现了该功能。

功能如下:自动获取左边勾选的联系人,采集指定日期区间的联系人的聊天记录。

直接上效果图和视频

(12)PC端微信自动化测试-C#采集微信聊天记录_第1张图片

获取消息记录

(1)首先搜索根据勾选的搜索联系人

该功能已经在实现 链接如下(6)微信UI自动化-搜索指定联系人(C#) 这里不重复

(2)获取聊天面板中的消息

演示代码获取指定联系人10月10到今天的聊天记录

        private void GetMessage(string name)
        {
            tempCount = 0;
            List contents = new List();
            string chatPath = "/Pane/Pane[2]/Pane/Pane/Pane/Pane/Pane[2]/Pane[1]/Pane/List";
            var chatList = UI_WX_Window.Current.Find(chatPath);
            while (true)
            {
                var chatListItemSource = chatList.FindAllChildren().ToList();
                var tempMessageSource = new List();
                chatListItemSource.GetRange(0, chatListItemSource.Count - tempCount).ForEach(item =>
                {
                    if (item.ControlType == FlaUI.Core.Definitions.ControlType.ListItem)
                    {
                        var my = item.FindFirstByXPath("/Pane/Pane[2]/Pane/Pane/Pane/Text");
                        var to = item.FindFirstByXPath("/Pane/Pane[1]/Pane/Pane/Pane/Text");

                        if (my != null)
                        {
                            var button = item.FindFirstByXPath("/Pane/Button");
                            tempMessageSource.Add(new WXChatMessage { Content = my.Name.ToString(), UserName = button.Name.ToString(), Type = 1 });
                        }
                        else if (to != null)
                        {
                            var button = item.FindFirstByXPath("/Pane/Button");
                            tempMessageSource.Add(new WXChatMessage { Content = to.Name.ToString(), UserName = button.Name.ToString(), Type = 2 });
                        }
                        else
                        {
                            var time = item.FindFirstByXPath("/Text");//日期
                            if (time != null)
                            {
                                var s = DateTime.Now;
                                DateTime.TryParse(item.Name, out s);
                                tempMessageSource.Add(new WXChatMessage { Time = s == DateTime.MinValue ? DateTime.Now : s, Content = time.Name.ToString(), Type = 3 });
                            }
                        }
                    }
                });
                contents.InsertRange(0, tempMessageSource);

                tempCount = chatListItemSource.Count();

                var beTime = DateTime.Parse("2023-10-10");

                if (tempMessageSource.Where(b => b.Type == 3 && b.Time <= beTime).Count() > 0)
                {
                    break;
                }

                //点击查看更多
                if (chatListItemSource[0].ControlType == FlaUI.Core.Definitions.ControlType.Button && chatListItemSource[0].Name.ToString() == "查看更多消息")
                {
                    //点击
                    ScrollTop(chatList, chatListItemSource[0]);
                }
                else
                {
                    break;
                }
            }
            ChatSource.Add(new WXChat { Name = name, Chats = contents });
        }

(3)如果发现未到指定日期需要滚动聊天面板循环获取

  private void ScrollTop(FlaUI.Core.AutomationElements.AutomationElement chatList, FlaUI.Core.AutomationElements.AutomationElement more)
        { 
            //点击后移动 
            if (chatList != null)
            {
              
                //先定位到最底部
                var contactScroll = chatList.Patterns.Scroll;
              

                int i = (int)Math.Round(1/ contactScroll.VerticalViewSize, 0);

                while (true)
                {
                    //获取滚动面板的视图
                    //VerticalViewSize为当前可视区域在整个滚动面板滚动区域高度中的比例 
                    var scroll = contactScroll.VerticalViewSize * i;

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

                    i++;

                    if (scroll == 0)
                    {
                        break;
                    }
                }

                Thread.Sleep(100);
            }
        }

如果读者对上述文章存在不清晰的地方可以找本人获取运行源码来学习,QQ 978124155

上一篇(11)微信UI自动化-微信窗口跟随主窗体移动(C#)

你可能感兴趣的:(微信自动化,自动化,运维)