pywinauto 获取朋友圈并将名片分享给好友

import time
import psutil
from pywinauto.application import Application


class wx_pc:
    def __init__(self, pid):
        self.pyq_text_list = []
        self.app = Application(backend='uia').connect(process=pid)
        self.dlg0 = self.app['微信']
        self.dlg = self.app['朋友圈']

    def open_pyq(self):
        # 对微信的窗口进行还原
        self.dlg0.restore()
        # 点开朋友圈
        self.dlg0.wait('ready', timeout=5)
        self.dlg0["朋友圈"].click_input()

    def get_window_text(self):
        return self.dlg["ListItem"].window_text().replace("\n", " ").split(" ")[1]

    def get_pyq_text(self, pid, pid_data_all):
        # 刷新朋友圈
        self.dlg.wait('ready', timeout=5)
        self.dlg["刷新Button"].click_input()
        # 等待朋友圈刷新-再去操作
        time.sleep(2)
        # 获取第一条朋友圈的文案
        cs = "佛山,深圳,东莞,南昌,厦门,福州,泉州,宁波,合肥,沈阳,南宁,桂林,苏州,温州,南京,天津,杭州,香港,澳门,重庆,成都,郑州,昆明,丽江,武汉,长沙,西安,青岛"
        res = self.get_window_text()
        # 获取朋友圈的内容输出 -判断字典是否存在已有的key,没有就添加
        if not pid_data_all.get(pid):
            pid_data_all[pid] = ""
        print("获取朋友圈的内容输出", res)
        if res not in pid_data_all.get(pid) and res[0:2] in cs:
            # if res not in pid_data_all.get(pid):
            pid_data_all[pid] = res
            print(pid_data_all)
            # 点击第一条朋友圈用户的头像
            self.dlg["Button4"].click_input()
            self.dlg["更多Button"].click_input()
            self.dlg["把她推荐给朋友"].click_input()
            # 搜索要发送的群
            # self.dlg.child_window(title="搜索", control_type="Edit").type_keys("金牌佛山")
            self.dlg.child_window(title="搜索", control_type="Edit").type_keys("金牌" + res[0:2])
            # 点击搜索出来的群
            time.sleep(0.5)
            self.dlg["群聊Pane5"].click_input()
            # 点击发送按钮
            self.dlg.child_window(title="发送", control_type="Button").click_input()
            self.dlg.child_window(title="朋友圈", control_type="List")
            # 点击关闭朋友圈按钮
            for i in range(2):
                self.dlg["关闭Button"].click_input()
            return res
        else:
            for i in range(2):
                self.dlg["关闭Button"].click_input()
                # print("获取朋友圈的内容输出1", res)
            return
            # while True:
            #     # 20s 刷新一次
            #     time.sleep(20)
            #     self.dlg["刷新Button"].click_input()
            #     res = self.get_window_text()
            #     if res not in self.pyq_text_list:
            #         self.pyq_text_list.append(res)
            #         break
            # self.get_pyq_text()

    def change_info(self, res):
        if res:
            # 将提取的信息发送到群里面
            # 点击微信的搜索框
            # print("走到这里来没 ")
            self.dlg0.child_window(title="搜索", control_type="Edit").click_input()
            time.sleep(2)
            # 在搜索框输入群名称
            # self.dlg0.child_window(title="搜索", control_type="Edit").type_keys("金牌佛山")
            self.dlg0.child_window(title="搜索", control_type="Edit").type_keys("金牌" + res[0:2])
            # 点击搜索出来的群名称
            # self.dlg0["Button24"].click_input()
            try:
                time.sleep(0.5)
                # self.dlg0.child_window(title="金牌佛山", control_type="ListItem", found_index=1).click_input()
                self.dlg0.child_window(title="金牌" + res[0:2], control_type="ListItem", found_index=1).click_input()
                # self.dlg0["ListItem3"].click_input()
            except Exception as e:
                print(repr(e))
                self.dlg0["sendBtnButton"].click_input()
            # 在对话框里面输入文字,点击发送
            self.dlg0.child_window(title="输入", control_type="Edit").type_keys(res)
            self.dlg0["sendBtnButton"].click_input()
            # 对微信的窗口最小化
            self.dlg0.minimize()
        else:
            self.dlg0.minimize()


def test(pid, pid_data_all):
    try:
        pc = wx_pc(pid)
        pc.open_pyq()
        res = pc.get_pyq_text(pid, pid_data_all)
        pc.change_info(res)
    except Exception as e:
        print("test", repr(e))


def task1():
    pid_data_all = {}
    while True:
        try:
            # 获取微信pid
            for proc in psutil.process_iter():
                try:
                    pinfo = proc.as_dict(attrs=['pid', 'name'])
                except psutil.NoSuchProcess:
                    pass
                else:
                    if 'WeChat.exe' == pinfo['name']:
                        pid = pinfo['pid']
                        test(pid, pid_data_all)
        except Exception as e:
            print("task1", repr(e))
            continue


task1()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值