Python轻松下载整理或删除微信收藏

玩微信很久的朋友,微信收藏中往往都积累了大量的链接,时间长了基本只能是落灰。

考虑到群友的实际需求,我们今天的实现目标是下载微信收藏的所有链接数据,并删除所有的微信收藏。

那么下面看看我如何实现通过Python来下载微信收藏的链接吧:

下载微信收藏

首先我们打开微信收藏的链接的界面并获取列表对象:

import uiautomation as auto

wechatWindow = auto.WindowControl(searchDepth=1, Name="微信", ClassName='WeChatMainWndForPC')
button = wechatWindow.ButtonControl(Name='收藏')
button.Click()
button = wechatWindow.ButtonControl(Name='链接')
button.Click()
collect = wechatWindow.ListControl(Name='收藏')
print(collect)
ControlType: ListControl    ClassName:     AutomationId:     Rect: (338,99,922,773)[584x674]    Name: '收藏'    Handle: 0x0(0)

运行后程序会自动点击微信的收藏和链接按钮:

在这里插入图片描述
刚点开的微信收藏不能保证列表已经移动到顶部,下面我们用代码让它置顶:

def collectTOP():
    last = None
    # 点击列表组件左上角空白部分,激活右窗口
    collect.Click(10, 10)
    while 1:
        item = collect.GetFirstChildControl().TextControl()
        print(item.Name)
        item.SendKeys("{PAGEUP 10}")
        if last == item.Name:
            break
        last = item.Name
        
collectTOP()

原理是激活收藏列表后,每次循环按10次向上翻页键,直到列表头部不再发生变化,从而达到滚动到顶部的效果。

其实这步人工操作也没啥。

下面我们看看如何读取各个列表项UI组件的文本数据,经过节点分析可以清晰的看到节点查找路径:

在这里插入图片描述
为什么我选择按钮作为起始查找点呢?因为我发现只有左侧的图标按钮才是100%有的,而左侧文本的个数却是不确定的,最终编写代码如下:

def read_collect_info(ico_tag):
    # 根据按钮相对位置找到文本节点的位置
    desc_tags = ico_tag.GetNextSiblingControl().GetNextSiblingControl().GetChildren()
    content = "\n".join([desc_tag.Name for desc_tag in desc_tags])

    time_tag, source_tag = ico_tag \
        .GetParentControl().GetParentControl() \
        .GetNextSiblingControl().GetNextSiblingControl() \
        .GetChildren()[:2]
    time, source = time_tag.Name, source_tag.Name
    return content, time, source


# 每个UI列表元素内部都必定存在左侧的图标按钮
ico_tag = collect.GetFirstChildControl().ButtonControl()
content, time, source = read_collect_info(ico_tag)
print(content, time, source, sep="\n")

可以看到数据都正确的提取:

在这里插入图片描述
测试2类缺数据的异常节点也没有问题:

在这里插入图片描述
对于每条收藏的链接我们需要右键点击复制链接后,再从剪切板读取:

def get_meau_item(name):
    menu = wechatWindow.MenuControl()
    menu_items = menu.GetLastChildControl().GetFirstChildControl().GetChildren()
    for menu_item in menu_items:
        if menu_item.ControlTypeName != "MenuItemControl":
            continue
        if menu_item.Name == name:
            return menu_item

ico_tag.RightClick()
menu_item = get_meau_item("复制地址")
menu_item.Click()
url = auto.GetClipboardText()
print(url)

可以看到能够正确的提取链接:

在这里插入图片描述
基于以上测试,最终整理修改的完整代码为:

import pandas as pd
import uiautomation as auto


def collectTOP(collect):
    last = None
    # 点击列表组件左上角空白部分,激活右窗口
    collect.Click(10, 10)
    while 1:
        item = collect.GetFirstChildControl().TextControl()
        print(item.Name)
        item.SendKeys("{PAGEUP 10}")
        if last == item.Name:
            break
        last = item.Name


def read_collect_info(ico_tag):
    # 根据按钮相对位置找到文本节点的位置
    desc_tags = ico_tag.GetNextSiblingControl().GetNextSiblingControl().GetChildren()
    content = "\n".join([desc_tag.Name for desc_tag in desc_tags])

    time_tag, source_tag = ico_tag \
        .GetParentControl().GetParentControl() \
        .GetNextSiblingControl().GetNextSiblingControl() \
        .GetChildren()[:2]
    time, source = time_tag.Name, source_tag.Name
    return content, time, source


def get_meau_item(name):
    menu = wechatWindow.MenuControl()
    menu_items = menu.GetLastChildControl().GetFirstChildControl().GetChildren()
    for menu_item in menu_items:
        if menu_item.ControlTypeName != "MenuItemControl":
            continue
        if menu_item.Name == name:
            return menu_item


wechatWindow = auto.WindowControl(
    searchDepth=1, Name="微信", ClassName='WeChatMainWndForPC')
button = wechatWindow.ButtonControl(Name='收藏')
button.Click()
button = wechatWindow.ButtonControl(Name='链接')
button.Click()
collect = wechatWindow.ListControl(Name='收藏')
collectTOP(collect)

result = []
last = None
while 1:
    page = []
    text = collect.GetFirstChildControl().TextControl().Name
    if text == last:
        # 首元素无变化说明已经到底部
        break
    last = text
    items = collect.GetChildren()
    for i, item in enumerate(items):
        # 每个UI列表元素内部都必定存在左侧的图标按钮
        ico_tag = item.ButtonControl()
        content, time, source = read_collect_info(ico_tag)
        # 对首尾位置的节点作偏移处理
        item.RightClick(y=-5 if i == 0 else 5 if i == len(items)-1 else None)
        get_meau_item("复制地址").Click()
        url = auto.GetClipboardText()
        row = [content, time, source, url]
        print("\r", row, end=" "*1000)
        page.append(row)
    result.extend(page)
    item.SendKeys("{PAGEDOWN}")

df = pd.DataFrame(result, columns=["文本", "时间", "来源", "url"])
df.drop_duplicates(inplace=True)
print("微信收藏的链接条数:",df.shape[0])
df.head()

运行过程中的截图(省略中间部分):

在这里插入图片描述
最终结果得到一个结构化表格:

在这里插入图片描述
于是我们可以加一行代码,将下载到的微信收藏数据保存起来:

df.to_excel("微信收藏链接.xlsx", index=False)

如果需要标题和描述分列,可以作如下处理之后再保存:

df[["标题", "描述"]] = df.文本.str.split(r"\n", 1, True)
df = df[["标题", "描述", "时间", "来源", "url"]]
df.to_excel("微信收藏链接.xlsx", index=False)

看到曾经收藏的链接被保存到本地真是身心愉悦:

在这里插入图片描述

批量删除微信收藏

微信收藏对于我个人来说既然已经都下载下来就没有必要继续在里面落灰了,是时候批量清理一波了。

由于删除是危险操作,所以要删除哪里开始的微信由人工自己调好位置。运行代码将将会反复删除第一项微信收藏。

首先测试一下删除5条微信收藏:

import uiautomation as auto


def get_meau_item(name):
    menu = wechatWindow.MenuControl()
    menu_items = menu.GetLastChildControl().GetFirstChildControl().GetChildren()
    for menu_item in menu_items:
        if menu_item.ControlTypeName != "MenuItemControl":
            continue
        if menu_item.Name == name:
            return menu_item

wechatWindow = auto.WindowControl(
    searchDepth=1, Name="微信", ClassName='WeChatMainWndForPC')
collect = wechatWindow.ListControl(Name='收藏')

for _ in range(5):
    item = collect.GetFirstChildControl()
    item.RightClick()
    get_meau_item("删除").Click()
    confirmDialog = wechatWindow.WindowControl(
        searchDepth=1, Name="微信", ClassName='ConfirmDialog')
    delete_button = confirmDialog.ButtonControl(Name="确定")
    delete_button.Click()

可以看到完全木有问题:

在这里插入图片描述
那么想要批量删除全部微信收藏只需要改一下循环次数即可。

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(文末获取!)
在这里插入图片描述
温馨提示:篇幅有限,已打包文件夹,获取方式在“文末”!!!

二、Python必备开发工具

在这里插入图片描述

三、精品Python学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

六、Python练习题

检查学习结果。
在这里插入图片描述

七、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值