PyWinAuto自动化实战

本文介绍了如何通过Python的PyWinAuto库实现对钉钉应用的自动化操作,包括搜索成员、筛选聊天记录并提取特定发送者的信息,强调了实践和动手编程的重要性。
摘要由CSDN通过智能技术生成

  纸上得来终觉浅,学习任何技术都得上手练习,我也是在实战的过程遇到很多坑,例如:在钉钉筛选聊天记录过程中,选择发送人,这个弹窗使用好几种方式获取不到,各种打印调试,搞到晚上1点多,最后用了最原始的方法,其实就是简单的问题复杂化了。今天这个实战很简单:1、进入钉钉,2、搜索聊天群,3、打开聊天记录,4、选择指定的发送消息的人,5、获取聊天信息并过滤数据。

  获取钉钉搜索框,输入名称之后,回车,为了避免模糊匹配,使用全名称。
在这里插入图片描述

search = dlg.child_window(title="搜索", control_type="Edit")
search.click_input()
search.type_keys("Alan-焦清迎")
time.sleep(1)
SendKeys("{ENTER}")

time.sleep(1)

  点击聊天记录,这里使用 click_input(),click() 无用,具体看前面介绍。
在这里插入图片描述

log = dlg.child_window(title="聊天记录", control_type = "Button")
log.click_input()

  选择成员,这个窗口有很多控件属性一样,所以使用下标定位,descendants() 就是获取所有子孙元素。
在这里插入图片描述

log_dlg = app.top_window()
mem = log_dlg.descendants(title="点击选择", control_type="Text")
mem[0].click_input()

  在选择联系人弹窗中,先获取弹窗结构信息,然后输入组员,最后确定。
在这里插入图片描述

select_dlg = app.top_window()
name = select_dlg.child_window(title_re="搜索名字.*", control_type="Edit")
name.click_input()
name.type_keys("Alan-焦清迎")
time.sleep(1)
SendKeys("{ENTER}")
time.sleep(1)
confir = select_dlg.child_window(title_re="确定.*", control_type="Button")
confir.click()

  最后获取聊天信息,搜索完组员后,窗口结构发生了变化,要重新获取窗口信息,然后获取所有 Text 类型的控件文本,这里面保存的就是聊天信息。
在这里插入图片描述

log_dlg = app.top_window()

content = log_dlg.descendants(control_type = "Text")
count = len(content)-10

最后,就会循环获取文本,过滤掉无用信息,比如:日程,然后输出到本地文件。

content = log_dlg.descendants(control_type = "Text")
# 这个 Text 有10个是固定的功能,没有保存聊天信息,所以去除掉
count = len(content)-10

# 头部有4个信息不是所需,去除掉,跟上面的一样,都是打印结构判断的
new_content = content[4:count]
total = len(new_content)

i = 0
while i < total:
    s = new_content[i].texts()

    if r'[日程]' in s:
        del new_content[i]
        del new_content[i-1]
        del new_content[i-2]
        total -= 3
        i -= 3
        continue
    i += 1

for j in range(total):
    c = new_content[j].texts()
    new_str = " ".join(c).strip()
    print(new_str)
    with open(r"C:\Users\xxxx\Desktop\2.txt", "a", encoding="UTF-8") as fp:
        fp.write(new_str.strip() + "\n")

time.sleep(2)
select_dlg.close()

  这样一个满足需求的获取聊天记录的脚本就写好了,这个不是测试应用程序自动化,所以没有搞函数封装,也没有搞分层设计,如果大家工作中有开展自动化,也可以考虑分层、封装。到此,PyWinAuto 讲解就结束了,还是那句话,要动手练习,遇到不会的查资料,这样才能加深印象。最后附上完整的代码。

from pywinauto import Application,findwindows
from pywinauto.keyboard import SendKeys
import time

app = Application("uia").connect(title="钉钉")
dlg = app.window(title="钉钉")

search = dlg.child_window(title="搜索", control_type="Edit")
search.click_input()
search.type_keys("Alan")
time.sleep(1)
SendKeys("{ENTER}")

time.sleep(1)

log = dlg.child_window(title="聊天记录", control_type = "Button")
log.click_input()

time.sleep(2)
log_dlg = app.top_window()
mem = log_dlg.descendants(title="点击选择", control_type="Text")
mem[0].click_input()

time.sleep(2)
select_dlg = app.top_window()
name = select_dlg.child_window(title_re="搜索名字.*", control_type="Edit")
name.click_input()
name.type_keys("Alan迎")
time.sleep(1)
SendKeys("{ENTER}")
time.sleep(1)
confir = select_dlg.child_window(title_re="确定.*", control_type="Button")
confir.click()

time.sleep(1)
log_dlg = app.top_window()

content = log_dlg.descendants(control_type = "Text")
count = len(content)-10

new_content = content[4:count]
total = len(new_content)

i = 0
while i < total:
    s = new_content[i].texts()

    if r'[日程]' in s:
        del new_content[i]
        del new_content[i-1]
        del new_content[i-2]
        total -= 3
        i -= 3
        continue
    i += 1

for j in range(total):
    c = new_content[j].texts()
    new_str = " ".join(c).strip()
    print(new_str)
    with open(r"C:\Users\xxx\Desktop\2.txt", "a", encoding="UTF-8") as fp:
        fp.write(new_str.strip() + "\n")

time.sleep(2)
select_dlg.close()
  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值