整理 | 小耕家的喵大仙
出品 | CSDN(ID:lichao19897314)
Q Q | 978124155
往期知识回顾
(19)C#添加微信好友(可批量添加)--微信UI自动化(.Net)
(20)将微信群成员添加为好友-微信UI自动化(.Net+C#)
👆😀以上文章是以往使用自动化方案操作微信的一些案例!如有兴趣请点击浏览!
因为文章可能无法满足读者要求,如需源码和支持请联系本人 QQ 978124155
本篇目的
今天一位做电商行业朋友联系我,说他想将一些微信里面的联系人批量删除,其实在2022年我们就这个事情做过讨论和分析,因为当时他并不是特别急切所有就一直搁置着,今天他联系我说特别想要一个这样的功能来帮助他完成这个操作。因为纯手工完成这些工作对他来说已经很困难了。
经过对需求的分析,发现删除联系人只需要对通讯录管理窗体进行操作。首先使用通讯录搜索功能进行搜索对应的昵称后得出搜索结果,勾选需要删除的联系人,点击面板右下方的删除按钮后弹出确认对话框,点击对话框确认按钮即可完成某个联系人的删除。
软件视频及截图
各位朋友如果时间允许可观看视频直观感受下添加微信群成员为好友的执行过程,更加直观清晰,本人将自动化速度调节的慢些,以便更加清晰的感受到自动化带来的魅力。
软件初始化界面
录入删除联系人任务
执行完成后结果显示
实现思路
- 执行点击微信主面板的【通讯录】按钮,最好执行【聊天】按钮的点击,效果会更好
- 当微信主面板切换到通讯录后,检索【通讯录管理】按钮,如果发现通讯录滚动条滚动位置不在最顶部,则需要将滚动条滚动后才能显示出【通讯录管理】按钮,执行【通讯录管理】按钮点击,打开通讯录管理窗体。
- 搜索【通讯录管理】窗体中的【搜索】文本框控件,将需要删除的微信昵称设置到【搜索】文本框中,等待500毫秒后微信会自动得出搜索结果。
- 如果搜索结果为【无符合条件的结果】则停止或者继续下一个删除任务。
- 如果搜索结果不为空,则在搜索结果列表中找到对应联系人【复选框】勾选上。
- 勾选上后【通讯录面板】右下方会自动出现【删除】按钮,点击【删除】按钮。
- 点击成功后微信会弹出【确认对话框】,这时我们找到【确认对话框】的确定按钮,执行点击,完成对应联系人的删除操作。
- 在所有的删除任务执行完成后,我们记得关闭【通讯录管理】窗体。
技术细节
删除联系人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#)https://blog.csdn.net/lichao19897314/article/details/136938649
(22)采集微信通讯录详情面板-微信UI自动化(.Net+C#)https://blog.csdn.net/lichao19897314/article/details/138498543