Python win32gui exe自动化点击捞取报表

Python win32gui exe自动化点击捞取报表打开应用使用到win32apiimportwin32conimportwin32guiimporttimefromtimeimportsleepimportwin32apiimportwin32com.clientwin32api.ShellExecute(1,’open’,’%s’%app_path,”,”,win32con.SW_SHOW)首先获取应用的句柄win32gui.FindWindow(None,”Main”)#类名,标题#…

大家好,欢迎来到IT知识分享网。Python

打开应用使用到win32api

import win32con
import win32gui
import time
from time import sleep
import win32api
import win32com.client
win32api.ShellExecute(1, 'open', '%s'%app_path, '', '', win32con.SW_SHOW)

首先获取应用的句柄

win32gui.FindWindow(None, "Main")  #类名,标题
# 可以通过再次判断是否存在该句柄
while not MainWin: # 强制获取句柄,如无意外的话,可以添加次数控制,或时间控制
    MainWin = win32gui.FindWindow(None, "Main")  # 类名,标题

获取应用后将应用置顶层

shell = win32com.client.Dispatch("WScript.Shell")# 创建一次即可
#如多次创建后或将致使程序崩溃, Dispatch 用调用到线程。

shell.SendKeys('%')# 使用SetForegroundWindow前要进行键入操作
win32gui.SetForegroundWindow(MainWin) # 句柄,置为第一层

遍历子窗口

hwndChildList1 = []     
win32gui.EnumChildWindows(hwnd, lambda hwnd, param: param.append(hwnd),  hwndChildList1)
print(hwndChildList1)# 遍历获取子控件及窗口

for i in hwndChildList1:
    print(i)# 控件
    print(win32gui.GetWindowText(i))# 句柄的名称
    print(win32gui.GetClassName(i))# 句柄的类名
    text = win32gui.GetWindowText(i)
    #

传回按键

# OK_hwnd 找到句柄后 传入按键Enter
win32gui.PostMessage(OK_hwnd, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
win32gui.PostMessage(OK_hwnd, win32con.WM_KEYUP, win32con.VK_RETURN, 0)

# 关闭
win32gui.PostMessage(hwnd, win32con.WM_CLOSE, 0, 0)
win32gui.PostMessage(Main_hwnd, win32con.WM_CLOSE, 0, 0)

使用鼠标点击

def mouse_click(a, b):
    # x,y
    time.sleep(1)
    win32api.SetCursorPos((a, b))
    time.sleep(1)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) # 360会拦截虚拟按键,可以添加信任或者关闭360
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)

COMBOBOX与EDIT的选择

# 应用于Combox类的选项
item_index = 1  # 索引值是从0开始的,这里是第3项
win32api.SendMessage(combox_hwnd , win32con.CB_SETCURSEL, item_index, 0)

for i in hwndChildList1:
        print(i)
        print(win32gui.GetWindowText(i))
        print(win32gui.GetClassName(i))
        Clstext = win32gui.GetClassName(i)
        text = win32gui.GetWindowText(i) 
        if "COMBOBOX" in Clstext:
            combox_hwnd = i
            item_index = 1  # 索引值是从0开始的,这里是第3项
            win32api.SendMessage(i, win32con.CB_SETCURSEL, item_index, 0)
        if "EDIT" in Clstext:# EDIT文本框
            count_edit +=1 
            if count_edit ==1:
                win32gui.SendMessage(i,win32con.WM_SETTEXT,None,end_date)
            else:
                win32gui.SendMessage(i,win32con.WM_SETTEXT,None,start_date)

过程主要是模拟人手点击的过程,

从打开应用,填入相应信息点击导出再到保存路径,最后保存。

每一步如若涉及到新的窗口需要重新获取句柄,且读取获取句柄下的子控件且子窗口的句柄,获取相应text及class 类在根据相应需求的句柄进行填写,

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/15827.html

(0)
上一篇 2024-02-13 21:00
下一篇 2024-02-14 10:33

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信