(21)批量删除微信联系人-微信UI自动化(.Net+C#)

整理 | 小耕家的喵大仙

出品 | CSDN(ID:lichao19897314)

Q Q | 978124155

 往期知识回顾

(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)

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

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

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

本篇目的

      今天一位做电商行业朋友联系我,说他想将一些微信里面的联系人批量删除,其实在2022年我们就这个事情做过讨论和分析,因为当时他并不是特别急切所有就一直搁置着,今天他联系我说特别想要一个这样的功能来帮助他完成这个操作。因为纯手工完成这些工作对他来说已经很困难了。

   经过对需求的分析,发现删除联系人只需要对通讯录管理窗体进行操作。首先使用通讯录搜索功能进行搜索对应的昵称后得出搜索结果,勾选需要删除的联系人,点击面板右下方的删除按钮后弹出确认对话框,点击对话框确认按钮即可完成某个联系人的删除。

软件视频及截图

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

软件初始化界面

录入删除联系人任务

执行完成后结果显示

实现思路

  1. 执行点击微信主面板的【通讯录】按钮,最好执行【聊天】按钮的点击,效果会更好
  2. 当微信主面板切换到通讯录后,检索【通讯录管理】按钮,如果发现通讯录滚动条滚动位置不在最顶部,则需要将滚动条滚动后才能显示出【通讯录管理】按钮,执行【通讯录管理】按钮点击,打开通讯录管理窗体。
  3. 搜索【通讯录管理】窗体中的【搜索】文本框控件,将需要删除的微信昵称设置到【搜索】文本框中,等待500毫秒后微信会自动得出搜索结果。
  4. 如果搜索结果为【无符合条件的结果】则停止或者继续下一个删除任务。
  5. 如果搜索结果不为空,则在搜索结果列表中找到对应联系人【复选框】勾选上。
  6. 勾选上后【通讯录面板】右下方会自动出现【删除】按钮,点击【删除】按钮。
  7. 点击成功后微信会弹出【确认对话框】,这时我们找到【确认对话框】的确定按钮,执行点击,完成对应联系人的删除操作。
  8. 在所有的删除任务执行完成后,我们记得关闭【通讯录管理】窗体。

技术细节

删除联系人DTO对象

 public class DeleteWeChatFriendDTO : BaseWeChatDTO
 {
     public DeleteWeChatFriendDTO()
     {
         Result =  DeleteResult.NoExecute;
         Log = "未执行";
     }
     string name = string.Empty;
     /// <summary>
     /// 微信名称
     /// </summary>
     public string Name
     {
         get
         {
             if (string.IsNullOrEmpty(name))
                 return string.Empty;
             return name;
         }
         set { name = value; PropertyChange("Name"); }
     }

     private DeleteResult result { get; set; }
     /// <summary>
     ///  任务执行结果
     /// </summary>
     public DeleteResult Result { get { return result; } set { result = value; PropertyChange("Result"); } }

     private string log { get; set; }
     /// <summary>
     /// 执行结果
     /// </summary>
     public string Log { get => log; set { log = value; PropertyChange("Log"); } }
     /// <summary>
     /// 实际执行时间
     /// </summary>
     DateTime? executeTime;
     /// <summary>
     /// 实际执行时间描述
     /// </summary>
     public DateTime? ExecuteTime
     {
         get
         {
             return executeTime;
         }
         set
         {
             executeTime = value;
             PropertyChange("ExecuteTime");
         }
     }

     public void ResultNoFound()
     {
         Result = DeleteResult.NoFound;
         Log = "无符合条件的结果";
     }
     public void ResultSuccess()
     {
         Result = DeleteResult.Success;
         Log = "删除成功";
     }
 }

点击【聊天】【通讯录】【通讯录管理】按钮

public void InitContractPanel(){   
UI_WX_Window.Current.Focus();
   RandomSleep(300, 400);

   if (!ClickChatButton())
       throw new Exception("聊天面板按钮点击失败");
   RandomSleep(500, 600);

   if (!ClickContactsButton())
       throw new Exception("通讯录点击失败");
   RandomSleep(500, 600);

   if (!ClickContractMangerButton())
       throw new Exception("通讯录管理点击失败");
   RandomSleep(300, 400);
 }

删除联系人具体流程 

   private bool DeleteCurrentFriend(DeleteWeChatFriendDTO task)
   {
       var contractList = Find("/Pane/Pane/Pane[3]/Pane[2]/Pane/Pane/Pane/Pane/Pane/List");
       if (contractList != null)
       {
           foreach (var item in contractList.FindAllChildren())
           {
               if (item.ControlType != FlaUI.Core.Definitions.ControlType.ListItem)
                   continue;

               var wxName = item.FindFirstByXPath("/Pane/Pane[1]/Pane[1]/Text")?.Name;
               var wxRemark = item.FindFirstByXPath("/Pane/Pane[1]/Pane[2]/Pane/Button")?.Name;
 
               if (!(wxName == task.Name || wxRemark == task.Name))
                   continue;

               var checkbox = item.FindFirstByXPath("/Pane/Pane[1]/CheckBox");
               if (checkbox.ControlType != Core.Definitions.ControlType.CheckBox)
               {
                   SystemLog.Error("联系人勾选框检索失败");
                   continue;
               }
               checkbox.Click();
               SystemLog.Info("选中需要删除的联系人");

               RandomSleep();
               //执行删除
               var deleteBtn = Find(@"/Pane/Pane/Pane[3]/Pane[2]/Pane/Pane/Pane/Pane/Pane/Pane[3]/Pane[2]/Pane[2]/Pane[4]/Button");
               if (deleteBtn == null)
               {
                   SystemLog.Error("删除联系人按钮未找到");
                   continue;
               }
               SystemLog.Info("点击删除联系人按钮");
               deleteBtn.Click();

               RandomSleep();

               //对弹出框做操作
               var confirm = window.FindFirstByXPath(@"/Window/Pane[2]/Pane/Pane[1]/Pane/Pane/Text");
               if (confirm == null || confirm.Name != "即将删除选中的联系人,同时删除与该联系人的聊天记录")
               {
                   SystemLog.Error("未找到删除联系人弹出确认框");
                   continue;
               }
               var confirmbtn = window.FindFirstByXPath("/Window/Pane[2]/Pane/Pane[2]/Button[2]");
               if (confirmbtn != null)
               {
                   SystemLog.Info("删除联系人弹出确认框执行确认点击");
                   confirmbtn.Click();
                   task.ResultSuccess();
                   return true;
               }
               else { 
                   SystemLog.Error("删除联系人弹出确认框确认按钮未找到");

               }
           }
       }
       else {
           SystemLog.Error("未找到联系人面板,检索失败");
       }
       return false;
   }

 关闭通讯录管理面板

        /// <summary>
        /// 关闭通讯录管理面板
        /// </summary>
        private void Close()
        {
            var close = this.Find("/ToolBar/Button[3]");
            if (close != null)
            {
                close.Click();
                SystemLog.Info("采集通讯录操作:(5)关闭通讯录成功");
            }
            else
            {
                SystemLog.Info("采集通讯录操作:(5)未找到关闭通讯录面板关闭按钮");
            }

        }

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

(20)将微信群成员添加为好友-微信UI自动化(.Net+C#)icon-default.png?t=N7T8https://blog.csdn.net/lichao19897314/article/details/136938649

 (22)采集微信通讯录详情面板-微信UI自动化(.Net+C#)icon-default.png?t=N7T8https://blog.csdn.net/lichao19897314/article/details/138498543

  • 19
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以给你一些指导。 首先,你需要使用ASP.NETC#来创建一个Web应用程序。你可以使用Visual Studio来完成这个任务。在创建项目时,选择ASP.NET Web应用程序模板。 接下来,你需要安装QrCode.Net和ZXing.Net NuGet包。这些包将帮助你生成和解析二维码。 在你的页面中,你可以使用QrCode.Net来生成二维码。你可以使用以下代码: ```csharp using QrCodeNet.Encoding; using QrCodeNet.Encoding.Windows.Render; using System.Drawing; // Generate QR code var encoder = new QrEncoder(ErrorCorrectionLevel.M); var code = encoder.Encode("Hello World!"); var renderer = new GraphicsRenderer(new FixedModuleSize(5, QuietZoneModules.Two), Brushes.Black, Brushes.White); var stream = new MemoryStream(); renderer.WriteToStream(code.Matrix, ImageFormat.Png, stream); stream.Position = 0; // Display QR code on page var img = new System.Web.UI.WebControls.Image(); img.ImageUrl = "data:image/png;base64," + Convert.ToBase64String(stream.ToArray()); ``` 在这个例子中,我们使用了QrCode.Net来生成一个包含“Hello World!”文本的二维码,并将其显示在一个ASP.NET页面上。 接下来,你需要使用ZXing.Net来解析二维码。你可以使用以下代码: ```csharp using ZXing; // Decode QR code var reader = new BarcodeReader(); var result = reader.Decode(new Bitmap(qrCodeImage)); // Display result on page if (result != null) { Response.Write("QR code text: " + result.Text); } else { Response.Write("Failed to decode QR code."); } ``` 在这个例子中,我们使用ZXing.Net来解析一个二维码图像,并在页面上显示结果。 最后,你需要将这些代码整合到一个页面中,并使用ASP.NET的事件模型来处理二维码扫描的结果。 希望这些指导可以帮助你完成这个项目!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小耕家的喵大仙

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

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

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

打赏作者

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

抵扣说明:

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

余额充值