(20)C#添加微信群成员为好友-微信UI自动化(.Net)

往期知识回顾

(1)C#开启探索微信自动化之路-微信UI自动化

(2)C#创建微信窗体自动化实例-微信UI自动化

(3)C#针对系统热键管理-微信UI自动化

(4)C#采集微信通讯录和联系人-微信UI自动化

(5)C#实现针对微信窗体鼠标静默点击-微信UI自动化

(6)C#搜索微信通讯录联系人-微信UI自动化

(7)C#实现微信消息群发-微信UI自动化

(8)C#监控微信进程运行状态-微信UI自动化

(9)C#监控微信网络连接状态-微信UI自动化

(11)C#实现微信窗体尺寸跟随调整-微信UI自动化

(12)C#采集微信聊天记录及历史消息-微信UI自动化

(13)C#实现自动回复微信消息-微信UI自动化

(14)C#针对微信界面元素截图操作-微信UI自动化

(15)C#实现对微信窗体的行为管控-微信UI自动化

(16)C#实现微信多开-微信UI自动化

(17)C#实现微信聊天文件接收及下载-微信UI自动化

(18)C#采集微信群成员信息-微信UI自动化(.Net)

(19)C#添加微信好友(可批量添加)--微信UI自动化(.Net)

👆😀以上文章是以往使用自动化方案操作微信的一些案例!如有兴趣请点击浏览!

因为文章可能无法满足读者要求,如需源码和支持请联系本人 QQ 978124155 

本篇目的

   近期一位做某行业微信私域运营的朋友联系我,说他有很多某行业的微信群,在这些微信群里面有些群成员并不是他的好友,所有他想将不是他好友的群成员全部发送好友请求添加至他的微信好友中,所以他求助到我说解决这个问题,我分析了下他的场景, 一共有20多个微信群,每个微信群大概约400人,所有要手动检查和添加是一个巨大的工作量。

   经过对需求的分析,发现只要获取到对应20个群中的群成员所有信息,这个已经在博客中实现 (18)C#采集微信群成员信息-微信UI自动化(.Net),然后在对应的群中做群成员搜索点击结果列表中的群成员头像,会弹出一个对应群成员用户信息的面板,用户信息面板会包含一些信息,其中就包括如果你是他好友则会出现“发消息”这类的元素,如果出现“添加至通讯录”这类的元素则代表该群成员不是你的好友,执行添加好友操作即可。

软件视频及截图

   各位朋友如果时间允许可观看视频直观感受下添加微信群成员为好友的执行过程,更加直观清晰,本人将自动化速度调节的慢些,以便更加清晰的感受到自动化带来的魅力。

添加群成员为好友

因为是测试环境,所有我这里只用一个群成员比较少群做测试,大概13个人。

经过等待,得出添加群成员为好友的结果列表,发现准备率是很高的,非好友的群成员已经全部成功发送好友成功。

实现思路
  1. 通过主面板的“搜索框”功能搜索定位到某个群的聊天面板。
  2. 点击聊天面板的“聊天信息”按钮,展开本群的详情面板。
  3. 定位到群详情面板的“搜索框”元素,输入某位群成员的昵称得出搜索结果,如果没有搜索结构则停止该群成员添加任务的执行,重新执行下一位操作。
  4. 发现搜索成功则执行该群成员UI元素的点击事件,弹出群成员的信息面板。
  5. 通过检索群成员信息面板中的信息,发现如果存在“添加至通讯录”按钮则代表该群成员还不是你的好友,执行下一步,如果未发现该按钮则代表该群成员在你的好友列表中。
  6. 执行“添加至通讯录按钮”,弹出“申请添加朋友”窗体。
  7. 在“申请添加朋友”窗体寻找到“发送添加朋友申请”,“备注名”,“标签”,“确定”等UI元素。
  8. 发送添加朋友申请”,“备注名”为文本框,直接设置文本值即可。
  9. “标签”为复选框集合面板,如果发现最后一个元素对象为Button,则代表有更多的标签,需要执行点击展开,展开后在复选框集合面板中寻找对应的标签控件,执行点击事件将该好友设置成对应的标签。
  10. 最后执行“确定”按钮点击事件,发送好友申请,执行下一轮等待操作后继续添加,因为不等待直接操作微信会提示操作频繁。
参考文章

(18)C#采集微信群成员信息-微信UI自动化(.Net)

(19)C#添加微信好友(可批量添加)--微信UI自动化(.Net)

技术细节

点击群主面板的聊天信息按钮

		/// <summary>
		/// 点击联系人面板的聊天信息按钮
		/// </summary>
		private bool ClickChatHistory()
		{
			var ele = UI_WX_Window.Current.Find("/Pane/Pane[1]/Pane/Pane/Pane/Pane[1]/Pane/Pane[3]/Pane[2]/Button");
            if (ele != null) { 
		     	UI_WX_Window.Current.ClickElement(ele);
                return true;
			}
            return false;
		}

获取群搜索文本框路径 

/// <summary>
/// 群面板搜索控件
/// </summary>
/// <returns></returns>
private bool FocusSearchGroupPanel()
{
	var ele = UI_WX_Window.Current.FindGroup("/Pane[1]/Pane/Pane/Pane/Pane/Pane[1]");
 
	if (ele != null)
	{
		Log.SystemLog.Info("群成员面板管理:群成员搜索框寻找成功,执行点击事件");
		ele.DoubleClick();
		return true;
	}
	else
	{
		Log.SystemLog.Error("群成员面板管理:群成员搜索框寻找失败");
		return false;

	}
}

 添加群成员为好友

 /// <summary>
 /// 添加群成员到好友
 /// </summary>
 /// <param name="contact"></param>
 private void AddGroupContract(AddWeChatFriendEntity contact)
 {
		Thread.Sleep(800);
     if (!FocusSearchGroupPanel())
     {
         contact.Log = "寻找群搜索文本框UI元素失败";

			return;
     }
     Thread.Sleep(400);

     UI_WX_Window.Current.ClearInput();

     WXUIAuto.Currnet.Invoke(new Action(() =>
     {
         new Model.WeChatInputMsgEntity
         {
             Type = Model.WXMessageType.Text,
             Info = contact.Name
         }.Copy();

         UI_WX_Window.Current.Paste();
     }));

     Log.SystemLog.Info("群成员面板管理:粘贴["+contact+"]信息成功");

     Thread.Sleep(400);//等待粘贴后结果
     var list = UI_WX_Window.Current.FindGroup("/Pane[2]/Pane/Pane/Pane/Pane[1]/Pane");///ListItem
     if (list != null && list.FindAllChildren().Count() > 0)
     {
         //list.Focus();   
         list.Click();
         Log.SystemLog.Info("群成员面板管理:执行联系人面板点击成功");
         list = UI_WX_Window.Current.FindGroup("/Pane[2]/Pane/Pane/Pane/Pane[2]/Pane/ListItem");//
         list.Click();
         Log.SystemLog.Info("群成员面板管理:执行"+contact+"框点击成功");

         var addFriend = UI_WX_Window.Current.Window.FindFirstByXPath("/Pane[1]/Pane[1]/Pane[1]/Pane/Pane/Pane/Pane[2]/Pane[2]/Button");
         if (addFriend == null)
         {
				contact.Log = "该微信已经为您的好友";
				Log.SystemLog.Error("添加到通讯录按钮寻找失败");
             ClickChatHistory();

			}
         else
         {
             addFriend.Click();
             Log.SystemLog.Info("群成员面板管理:执行添加到通讯录按钮点击事件成功");
             Thread.Sleep(400);
             this.SendAddFriendRequest(contact);
         }
     }
     else
     {
			contact.Log = "寻找当前群成员结果List元素失败";
			Log.SystemLog.Error("路径查找失败");
     }
 }

因为文章可能无法满足读者要求,如需源码和支持请联系本人 QQ 978124155 

上一篇 (19)C#添加微信好友(可批量添加)--微信UI自动化(.Net)icon-default.png?t=N7T8https://blog.csdn.net/lichao19897314/article/details/136899889

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/478327.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电脑桌面记事本备忘录哪个好用?好用的桌面备忘录推荐

在忙碌的工作间隙&#xff0c;我常常需要随手记录一些重要的想法或待办事项。每当这时&#xff0c;我都希望我的记事本备忘录能够如影随形&#xff0c;方便我随时打开、随时记录。可是&#xff0c;常规的记事本软件往往隐藏在电脑的角落&#xff0c;每次需要时都得费力地寻找&a…

解决Matplotlib 画图中文无法正常显示的问题(显示方框)

解决Matplotlib 画图中文无法正常显示的问题&#xff08;显示方框&#xff09; 错误描述解决方案一&#xff08;暂时解决&#xff09;解决方法二&#xff08;永久解决&#xff09;测试代码 错误描述 这个错误消息来自于使用 Python 的 IPython 环境&#xff0c;特别是在尝试输出…

使用sortablejs 对分层数据排序

在项目中&#xff0c;需要对有层级关系的数据进行排序&#xff0c;如图 Item 1 可以在item 2 、item 3 、item 4 等之间进行拖拽&#xff0c;但是item 1.1 item 1.2 等 只能在item 1 里面拖拽。拖拽的范围只能是该item 所在的层级里面拖拽&#xff0c;不能超出&#xff0c;也不…

外包干了6天,技术明显进步。。。

我是一名大专生&#xff0c;自19年通过校招进入湖南某软件公司以来&#xff0c;便扎根于功能测试岗位&#xff0c;一晃便是近四年的光阴。今年8月&#xff0c;我如梦初醒&#xff0c;意识到长时间待在舒适的环境中&#xff0c;已让我变得不思进取&#xff0c;技术停滞不前。更令…

【计算机毕业设计】ssm073基于Word自动出题系统

基于Word自动出题系统 操作系统: Windows XP或Windows 7 开发工具: myeclipse 数据库: MySQL 系统研究目的及意义&#xff1a; 本课题研究通过信息化的手段进行对试题的出题工作&#xff0c;实现更加有效便捷的试题的编写和试卷的生成。这样不仅可以最大程度上较少学校教研工作…

阿里云4核16G服务器优惠价格26.52元1个月、79.56元3个月、149.00元半年

阿里云4核16G服务器优惠价格26.52元1个月、79.56元3个月、149.00元半年&#xff0c;配置为阿里云服务器ECS经济e实例ecs.e-c1m4.xlarge&#xff0c;4核16G、按固定带宽 10Mbs、100GB ESSD Entry系统盘&#xff0c;活动链接 aliyunfuwuqi.com/go/aliyun 活动打开如下图&#xf…

物联网数据报表分析

随着物联网技术的迅猛发展&#xff0c;越来越多的企业开始将物联网解决方案应用于各个领域&#xff0c;从提高生产效率到优化用户体验&#xff0c;物联网都发挥着至关重要的作用。然而&#xff0c;如何有效地分析和管理物联网产生的海量数据&#xff0c;成为企业面临的挑战之一…

微软首批AI电脑来了!一键Copilot带飞,英特尔酷睿Ultra加持,零售店买不到

Surface Pro 10商用版和Surface Laptop 6商用版均起售1199美元。前者配酷睿Ultra U系列芯片&#xff0c;新增AI增强型摄像头&#xff0c;PC摄像头首次具有114度超宽视野&#xff0c;改进后13英寸LCD显示屏亮度提高33%&#xff1b;后者摄像头无超广角&#xff0c;但搭载的H系列芯…

基于ssm的医院门诊挂号系统论文

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;医院门诊挂号系统当然也不能排除在外。医院门诊挂号系统是以实际运用为开发背景&#xff0c;运用软件工程开发方法&…

淘宝、京东、1688商品详情接口对比:哪个更适合你的业务?

淘宝、京东、1688商品详情接口对比&#xff1a;哪个更适合你的业务&#xff1f; 请求示例&#xff0c;API接口接入Anzexi58 在电商业务中&#xff0c;商品详情接口扮演着至关重要的角色。通过调用这些接口&#xff0c;商家可以获取商品的详细信息&#xff0c;从而更好地进行商…

tinyrenderer-zBuffer隐藏面剔除

绘制物体的深度远近会影响最终投射的效果 画家算法&#xff1a;是z值排序所有物体&#xff0c;从远往近全部绘制&#xff0c;近处物体覆盖远处物体。效率低&#xff0c;且无法处理物体相互穿插的情况 维护一个zBuffer&#xff0c;记录每个像素点的最近zBuffer&#xff0c;根据…

C++ 哈希表

目录 两数之和 面试题 01.02. 判定是否互为字符重排 存在重复元素 存在重复元素 II 字母异位词分组 两数之和 1. 两数之和 思路1&#xff1a;两层for循环 思路2&#xff1a;逐步添加哈希表 思路3&#xff1a;一次填完哈希表 如果一次填完&#xff0c;那么相同元素的值&…

Stable Diffusion 本地训练端口与云端训练端口冲突解决办法

方法之一&#xff0c;修改本地训练所用的端口 1 首先&#xff0c;进入脚本训练器的根目录 例如&#xff1a;C:\MarkDeng\lora-scripts-v1.7.3 找到gui.py 2 修改端口号 因为云端训练器也是占用28000和6006端口 那么本地改成28001和6007也是可以的 保存退出&#xff0c;运行启动…

兼容 Presto、Trino、ClickHouse、Hive 近 10 种 SQL 方言,Doris SQL Convertor 解读及实操演示

随着版本迭代&#xff0c;Apache Doris 一直在拓展应用场景边界&#xff0c;从典型的实时报表、交互式 Ad-hoc 分析等 OLAP 场景到湖仓一体、高并发数据服务、日志检索分析及批量数据处理&#xff0c;越来越多用户与企业开始将 Apache Doris 作为统一的数据分析产品&#xff0c…

从0学代码审计——极致CMS v1.9.5

0x01 框架基础 环境搭建这块还是比较容易的&#xff0c;github可以下载任意版本的极致CMS&#xff0c;下载源码有注册脚本&#xff0c;本地只需要新建一个数据库即可安装成功。下载链接&#xff1a;https://github.com/Cherry-toto/jizhicms 下载后的目录结构如下&#xff1a;…

vue3+threejs新手从零开发卡牌游戏(七):创建卡组

在开始前先优化下之前的代码&#xff1a; 在之前hand/p1.vue中为了定位 utils文件夹下新建common.ts&#xff0c;将一些公用方法提取出来放在这里&#xff1a; 在game/Cards.ts中&#xff0c;我们调整下卡牌的厚度&#xff0c;由原来的0.02改为0.005&#xff0c;原因是之前的…

深入剖析Java并发库(JUC)之StampedLock的应用与原理

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 在现代多核处理器架构下&#xff0c;并发编程成为提升程序性能的关键手段。Java作为一门广泛使用的编程语言&#xff0c;提供了丰…

谷歌浏览器调用相同url数据不刷新

原代码 原因 谷歌浏览访问相同接口默认调用缓存数据 解决方案 添加时间戳

机器视觉学习(六)—— 图像的颜色识别

目录 一、色彩空间 1.1 RGB色彩空间 1.2 HSV色彩空间 1.3 灰度 1.4 CMYK色彩空间 1.5 Lab色彩空间 二、色彩空间转换 三、识别颜色 3.1 识别一种特定的颜色 3.2 识别多种颜色 一、色彩空间 计算机视觉中常用的色彩空间有RGB色彩空间、HSV色彩空间、CMYK色彩空间、La…

TR1 - Transformer起源与发展

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 1. Transformer的起源与发展 2017年Google在《Attention Is All You Need》中提出了Transformer结构用于序列标注&#xff0c;在翻译任务…
最新文章