首页 > 编程语言 >(4)PC端微信UI自动化-微信联系人采集(C#)

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

时间:2023-11-02 14:35:00浏览次数:38  
标签:滚动 C# 微信 联系人 PC UI Pane 面板

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

软件运行效果演示

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

标签:滚动,C#,微信,联系人,PC,UI,Pane,面板
From: https://www.cnblogs.com/lichao7314/p/17805325.html

相关文章

  • (3)微信UI自动化-热键管理(C#)
    ​    进行微信自动化前,因为采集或者发送消息任务执行需要时间,并且微信窗体会将焦点长期占有,导致我们对软件失去控制,所以我们需要使用热键的方式将任务停止。我们这里采用热键是​编辑。(1)编写一个热键管理类 这个类定义了捕获热键消息的ID,注册热键,注销热键的功能。usi......
  • 移动端注意事项及坑位1(CSS)
    学习 中高级前端必须注意的40条移动端H5坑位指南|网易三年实践1.调用系统功能a标签能快速调用移动设备电话/短信/邮件功能,input标签可快速调用移动设备相册文件<!--拨打电话--><ahref="tel:10086">拨打电话给10086小姐姐</a><!--发送短信--><ahref="sms:1008......
  • 直播小程序源码,react-native自定义文本输入框
    直播小程序源码,react-native自定义文本输入框Examplesfromprops: ... _onChange=(label,value)=>{  this.setState({[label]:value}); }; render(){  return(   <Viewstyle={styles.container}>    <Text>     {this.stat......
  • 网站验证码cookie,localStorage
    很多网站登录或则注册时,都会做一个利用手机号获取验证码证明为本人操作的选项。当然为了网站的web网站安全和防止信息炸弹等恶意操作,都会对再次获取验证码做一个倒计时,一般都为60s。而正常情况下只需利用JS定时函数很容易实现,这种情况下用户一旦刷新页面,页面dom中我们定义的js变量......
  • dev like 函数 widechar 版本
    functionLike(p1:PChar;l1:Integer;p2:PChar;l2:Integer;percent_char,underline_char,escape_char:Char):Boolean;overload;varc:Char;AEscapeFlag:Boolean;beginAEscapeFlag:=False;repeatDec(l2);ifl2<0thenBreak;......
  • C语言中静态函数和非静态函数的区别
     C语言中,静态函数和非静态函数的区别主要体现在以下方面:可见性:静态函数只能在当前文件内使用,不能被其他文件调用,而非静态函数可以被当前文件以外的其他文件调用,具有全局可见性。生命周期:静态函数在程序运行期间一直存在,不会被释放,而非静态函数则是在被......
  • CDN加速
    一、简介二、应用场景    系统有很多的静态资源的,并且请求量也是超级大的。例如:移动端APP,有很多的图片,小视频以及流媒体等,对于网站来说,不仅有上面那些资源之外,还有大量的HTML文件,css文件以及Javascript文件。目前这些静态资源均是放在Nginx服务器上的,请求量很大,并且这些......
  • ASP.NET Core Filter
    Filter在ASP.NETCore中允许code在指定的请求阶段前或者后执行。Filter在ASP.NETCore方法请求管道中运行,有时被称作filterpipeline,filterpipeline在ASP.NETCore选择Action执行。 Filter分类每个filtertype在filterpipeline的不同阶段执行。AuthorizationFilter:第一......
  • Docker基础
    Docker基础Docker常见命令Docker最常见的命令就是操作镜像、容器的命令,详见官方文档:https://docs.docker.com/案列:查看DockerHub,拉取Nginx镜像,创建并运行Nginx容器拉取镜像dockerpullnginx查看镜像dockerimages保存镜像为tar包dockersave-onginx.tarnginx:lat......
  • python @staticmethod 静态方法的使用
    `@staticmethod`是Python中的一个装饰器,用于将一个方法声明为静态方法。静态方法是一种不需要访问类实例的方法,可以直接通过类名调用,而不需要创建类的实例。静态方法的使用场景包括:1.辅助类或工具类:静态方法可以用于辅助其他类或提供一些通用的工具功能,而不需要与类的实例进......