因为工做须要,要利用某软件去采集数据,作重复的动做大概500屡次。因此想写一个程序代替人,去点击和输入。小程序
一开始的思路有两个:一、用Python或者windows对此软件直接操做。二、利用Python模拟鼠标和键盘操做,模拟人工去操做此软件。windows
第一种想法比较难实现,由于首先是没有此软件的接口,没办法进入它的后台。其次是Python没有这样的功能库。工具
第二种想法容易实现,可是有一个问题,是Python没办法接收软件的反馈,并做出判断,只能按照既定的鼠标和键盘设置进行操做。测试
“看鼠标”软件编码
Python的PyUserInput库(它的依赖库有pyhook,pyhook的依赖库为pywin32)spa
若是是在anaconda里面安装pyhook的话,有可能还须要安装个msgpackcode
采集工具以下图:blog
须要对它的界面点击和输入:“单位列表”→输入单位编号→回车→“数据采集”(等待5-10秒)→“上一步”接口
而后循环这个操做ip
点击的位置基本都是不变的,也不须要作判断,因此用pymouse和pykeyboard来操做比较方便。
因为pymouse须要填写鼠标的X,Y定位,因此须要利用一个叫“看鼠标”的小软件去实行。
from pymouse import PyMouse import time from pykeyboard import PyKeyboard def del_all(): """ 清空文本框 """ k.press_key(k.control_key) k.tap_key('A') k.release_key(k.control_key) k.tap_key(k.delete_key) def click_and_type(word): time.sleep(0.5) m.click(536, 531, 1)#点击“单位列表” time.sleep(0.5) del_all() k.type_string(word)#输入单位编码 time.sleep(1) k.tap_key(k.entry_key,1)#等它感应到对应单位后回车 time.sleep(0.5) m.click(1121, 732, 1)#点击“数据采集” time.sleep(10)#等待数据采集完毕,通常3秒左右完成,但须要预留多一点时间确保 m.click(1119,738,1)#点击“上一步” #主体执行部分 list_num=['A1002002','B213212']#实际执行过程当中有500多个单位,这里只展现两个 m = PyMouse() k = PyKeyboard() m.click(1600, 900, 1)#显示桌面 time.sleep(0.5) m.click(324, 872, 1)#显示软件 for i in range(len(list_num)): word = list_num[i] click_and_type(word)
而后程序就自动化的执行起来。在这类小程序的测试阶段,最好将脚本备份一下,将无关程序关闭。由于当你操做的小程序有意外状况时,你在强行中止程序的过程当中有可能影响到脚本。
在模拟的鼠标和键盘的时候,老是没法对程序的反馈作一个感应和判断。譬如操做的程序弹出一个对话框,Python模拟鼠标键盘的程序也只能继续跑下去。
虽然暂时没有办法感应到窗口,可是能够利用win32con和win32clipboard两个库,读取到windows的剪切板,从而对软件的文本进行一个读取。这个也算是
一个交互的方式。下面将相关的脚本奉上,供你们参考。
import win32con import win32clipboard as w def get_text(): """ 读取剪切板 """ w.OpenClipboard() t = w.GetClipboardData(win32con.CF_TEXT) w.CloseClipboard() a = t.decode('ANSI')#部分文本须要这个解码,显示中文 return a
good luck!