微信文章自动采集软件(微信PC端为例子,演示UIAutomation库的使用。。(二))

优采云 发布时间: 2021-10-27 23:23

  微信文章自动采集软件(微信PC端为例子,演示UIAutomation库的使用。。(二))

  我们可以通过 pip 直接安装来使用这个库:

  pip install uiautomation

  

  今天以微信PC端为例,演示UIAutomation库的使用。

  首先,我们的目标是从当前微信聊天窗口中提取聊天文本:

  提取当前微信聊天窗口的聊天记录

  首先,我们打开inspect.exe工具,定位到微信窗口:

  

  inspect.exe是windows系统自带的工具,文件位置可以通过一切搜索。在我的电脑上搜索到的位置是:C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64\inspect 。可执行程序

  Name和可以查询的名字在微信上启动自动控制:

  import uiautomation as auto

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

  我们以黄渤的群为例,演示从当前聊天窗口中提取数据。首先,我们需要分析一下ui节点的结构:

  

  可以看到消息列表节点的Name为“Message”,ControlType为UA_ListControlTypeId(0xC358),每条消息都是消息列表节点的子节点的名称。基于此,我们编码:

  messages = wechatWindow.ListControl(Name='消息')

for message in messages.GetChildren():

content = message.Name

print(content)

  打印结果的后半部分:

  2021年8月21日 20:26

8.25-26邀您观看百度BML线上课程,一起聊聊工业AI质检~

-单瑕疵、多瑕疵等复杂场景识别率如何提升

-采集样本质量保证,小样本数据量如何增强

-数据回流让模型持续优化,降低产品漏检率

-快速搭建AI质检模型进行效果验证

-高精度模型调参与算法优化技巧

[红包][红包]看直播抽取小度真*敏*感*词*、小度智能音箱、飞桨定制鼠标垫……新用户参与2021万有引力计划即刻获️100元京东卡奖励!

报名链接:https://paddle.wjx.cn/vm/exDHIgz.aspx?udsid=340852

[图片]

2021年8月21日 22:16

[链接]

7个实用技巧总结[强]

昨天 11:53

【直播消息】8月25日我们特别邀请到凡泰极客创始人&CTO 杨涛先生进行线上直播分享,和大家聊聊移动应用如何利用小程序容器技术做转型升级,欢迎阅读文章了解详情~

[链接]

18:50

"xman" 撤回了一条消息

  这种提取过于简单粗暴。如果还能知道发件人和链接内容就更好了。然后我们继续深入分析节点:

  

  嵌套有很多层次。继续分析各种情况下节点的结构和类型,多次测试,最后写出如下代码:

  import pandas as pd

wechatWindow.SetFocus()

messages = wechatWindow.ListControl(Name='消息')

result = []

time = pd.NA

for message in messages.GetChildren():

content = message.Name

if content in ["查看更多消息", "以下为新消息"]:

continue

details = message.GetChildren()[0].GetChildren()

if len(details) == 0:

time = content

continue

nickname, detail, me = details

name = nickname.Name

if me.Name:

name = me.Name

link_all = pd.NA

if not (content == "[图片]" or content.startswith("[语音]")):

details = detail.GetChildren()

if len(details) == 0:

continue

detail = details[-1].GetChildren()[0].GetChildren()[0].GetChildren()[0]

details = detail.GetChildren()

if len(details) != 0:

link_title = details[0].Name

link_content = details[1].Name

content += f"{link_title}\n{link_content}"

# print(time, name, content)

result.append((time, name, content.strip()))

df = pd.DataFrame(result, columns=["时间", "昵称", "内容"])

df

  结果:

  

  目前,我只能经过2个小时的测试才能提取到这个级别。感兴趣的朋友可以继续研究提取文件的文件名。

  找一个有趣的组,必须测试一下(不能辜负你的阵型):

  

  挺有意思的,下面我们来实现一下微信群聊轰炸机:

  自动发送微信消息

  分别勾选输入框和发送按钮的名称和类型:

  

  然后编写如下代码进行测试:

  edit = wechatWindow.EditControl(Name='输入')

edit.SendKeys('test')

sendButton = wechatWindow.ButtonControl(Name='发送(S)')

sendButton.Click()

  运行后,我在这里成功给自己发送了一个测试:

  

  表情包批量轰炸开始:

  import random

emoji_faces = [

"[微笑]", "[撇嘴]", "[色]", "[发呆]", "[得意]", "[流泪]", "[害羞]", "[闭嘴]", "[睡]", "[大哭]", "[尴尬]",

"[发怒]", "[调皮]", "[呲牙]", "[惊讶]", "[难过]", "[囧]", "[抓狂]", "[吐]", "[偷笑]", "[愉快]", "[白眼]",

"[傲慢]", "[困]", "[惊恐]", "[憨笑]", "[悠闲]", "[咒骂]", "[疑问]", "[嘘]", "[晕]", "[衰]", "[骷髅]", "[猪头]",

"[敲打]", "[再见]", "[擦汗]", "[抠鼻]", "[鼓掌]", "[坏笑]", "[右哼哼]", "[鄙视]", "[委屈]", "[快哭了]",

"[阴险]", "[亲亲]", "[可怜]", "[笑脸]", "[生病]", "[脸红]", "[破涕为笑]", "[恐惧]", "[失望]", "[无语]",

"[嘿哈]", "[捂脸]", "[奸笑]", "[机智]", "[皱眉]", "[耶]", "[吃瓜]", "[加油]", "[汗]", "[天啊]", "[Emm]",

"[社会社会]", "[旺柴]", "[好的]", "[打脸]", "[哇]", "[翻白眼]", "[666]", "[让我看看]", "[叹气]", "[苦涩]",

"[裂开]", "[嘴唇]", "[爱心]", "[心碎]", "[拥抱]", "[强]", "[弱]", "[握手]", "[胜利]", "[抱拳]", "[勾引]",

"[拳头]", "[OK]", "[合十]", "[啤酒]", "[咖啡]", "[蛋糕]", "[玫瑰]", "[凋谢]", "[菜刀]", "[便便]", "[月亮]",

"[太阳]", "[礼物]", "[红包]", "[發]", "[福]", "[跳跳]", "[发抖]", "[转圈]", "[*敏*感*词*]", "[庆祝]", "[烟花]"

]

wechatWindow.SetFocus()

for _ in range(5):

emoji_face = random.choice(emoji_faces)

edit.SendKeys(emoji_face)

sendButton.Click()

  先贴出5个随机表情:

  

  嘿嘿,测试成功。您可以自动发送消息,但不要在群聊中乱七八糟。退出群聊后,本文作者概不负责~

  瞬间爬行

  最后,我们将执行最后一个示例。如何查找节点元素,本次不演示。我们直接看代码。

  首先,我们获取 Moments 按钮并打开 Moments:

  button = wechatWindow.ButtonControl(Name='朋友圈')

button.Click()

  获取当前 Moments 窗口的数据:

  friendWindow = auto.WindowControl(

searchDepth=1, Name="朋友圈", ClassName='SnsWnd')

friendWindow.SetFocus()

listControls = friendWindow.ListControl(Name='朋友圈')

for item in listControls.GetChildren():

if item.ControlTypeName != "ListItemControl":

continue

print(item.Name)

panes = item.GetChildren()[0].GetChildren()[

0].GetChildren()[1].GetChildren()

if len(panes) >= 5:

print("评论:")

comments = panes[4].ListControl(Name='评论')

for comment in comments.GetChildren():

print(comment.Name)

print("------------------")

  可以看到Moments当前窗口中的数据也是完整获取的:

  

  这时候我们只需要添加一个代码,自动滑动Moments窗口,批量抓取Moments。

  如何批量抓取Moments?这是给各位童鞋们的功课,期待你们的童鞋们大显身手,拿出好的解决方案。

  后面我自己给个参考答案,敬请期待~

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线