前言

由于工作需要,要利用某软件去采集数据,做重复的动作大概500多次。所以想写一个程序代替人,去点击和输入。

一开始的思路有两个:1、用Python或者windows对此软件直接操作。2、利用Python模拟鼠标和键盘操作,模拟人工去操作此软件。

第一种想法比较难实现,因为首先是没有此软件的接口,没办法进入它的后台。其次是Python没有这样的功能库。

第二种想法容易实现,但是有一个问题,是Python没办法接收软件的反馈,并作出判断,只能按照既定的鼠标和键盘设置进行操作。


准备工具

“看鼠标”软件

Python的PyUserInput库(它的依赖库有pyhook,pyhook的依赖库为pywin32)

如果是在anaconda里面安装pyhook的话,有可能还需要安装个msgpack


实施

采集工具如下图:

需要对它的界面点击和输入:“单位列表”→输入单位编号→回车→“数据采集”(等待5-10秒)→“上一步”

然后循环这个操作

点击的位置基本都是不变的,也不需要做判断,所以用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!

Python模拟鼠标和键盘操作实现重复性操作的更多相关文章

  1. python模拟鼠标和键盘操作

    import win32api import win32con import win32gui from ctypes import * import time VK_CODE = { 'backsp ...

  2. python模拟鼠标键盘操作 GhostMouse tinytask 调用外部脚本或程序 autopy右键另存为

    0.关键实现:程序窗口前置 python 通过js控制滚动条拉取全文 通过psutil获取pid窗口句柄,通过win32gui使程序窗口前置 通过pyauto实现右键菜单和另存为操作 1.参考 aut ...

  3. python + selenium webdriver 通过python来模拟鼠标、键盘操作,来解决SWFFileUpload调用系统底层弹出框无法定位问题

    Webdriver是基于浏览器操作的,当页面上传文件使用的是flash的控件SWFFileUpload调用的时候,调用的是系统底层的文件选择弹出框 这种情况,Webdriver暂时是不支持除页面外的其 ...

  4. C# WPF 中用代码模拟鼠标和键盘的操作

    原文:C# WPF 中用代码模拟鼠标和键盘的操作 原文地址 C#开发者都知道,在Winform开发中,SendKeys类提供的方法是很实用的.但是可惜的是,在WPF中不能使用这个方法了. 我们知道,在 ...

  5. python模拟鼠标拖动操作的方法

    本文实例讲述了python模拟鼠标拖动操作的方法.分享给大家供大家参考.具体如下: pdf中的书签只有页码,准备把现有书签拖到一个目录中,然后添加自己页签.重复的拖动工作实在无趣,还是让程序帮我实现吧 ...

  6. 使用Robot类模拟鼠标、键盘事件

    Robot类用于模拟鼠标.键盘事件,生成本机系统输入事件.Robot 的主要用于自动化.自运行的程序和其他需要自动控制鼠标和键盘的程序 相当于实际操作的效果,不仅仅只是生成对应的鼠标.键盘事件.比如R ...

  7. C#模拟鼠标、键盘操作

    C语言 在程序中打开网页,模拟鼠标点击.键盘输入 一.简述         记--使用C语言 打开指定网页,并模拟鼠标点击.键盘输入.实现半自动填写账号密码,并登录网站(当然现在的大部分网站都有验证码 ...

  8. web自动化 模拟鼠标、键盘操作

    一.鼠标操作 1.1鼠标的悬停操作,move_to_element from selenium import webdriver from selenium.webdriver.common.acti ...

  9. 可以用py库: pyautogui (自动测试模块,模拟鼠标、键盘动作)来代替pyuserinput

    PyAutoGUI 是一个人性化的跨平台 GUI 自动测试模块 pyUserInput模块安装前需要安装pywin32和pyHook模块.(想要装的看https://www.cnblogs.com/m ...

随机推荐

  1. JSTL 引入

    首先要明白jstl有如下版本:  jstl1.0的引入方式为: <taglib uri="http://java.sun.com/jstl/core" prefix=&quo ...

  2. 【小梅哥SOPC学习笔记】sof与NIOS II的elf固件合并jic得到文件

    sof与NIOS II的elf固件合并jic得到文件 注意,本方法已经有更加简便的方法,小梅哥提供相应的脚本文件,可以一键生成所需文件,脚本请前往芯航线FPGA技术支持群获取. 7.1 为什么需要将S ...

  3. 从swing分发线程机制上理解多线程[转载]

    本文参考了 http://space.itpub.net/13685345/viewspace-374940,原文作者:javagui 在多线程编程当中,总会提到图形编程,比如java中的swing, ...

  4. 洛谷P2634 [国家集训队]聪聪可可 (点分治)

    题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好了,可是他们已 ...

  5. getField

    model.getField(field, num) field {String} 字段名,多个字段用逗号隔开 num {Boolean | Number} 需要的条数 return {Promise ...

  6. PreTranslateMessage()函数捕获键盘按键消息

    01. PreTranslateMessage函数,常用于屏蔽MFC对话框中默认的Enter和ESC消息 函数原型:BOOL PreTranslateMessage(MSG* pMsg) 用法举例: ...

  7. Application.DoEvent和定时刷新控件

    我们写一个textbox,让其依循环递增,但每次都会出现假死现象,等循环结束后,变为最终值.今天总结一下: private void button3_Click(object sender, Even ...

  8. C#连接SQL server数据库

    C#连接SQL server数据库 创建一个Windows应用程序,在窗体中添加TextBox控件.Button控件.Label控件. private void button1_Click(objec ...

  9. Ubuntu64 apache2+lvs+Keepalived

    安装 apache2, vim, keepalived 和 ipvsadm 打开 vim /etc/keepalived/keepalived.conf 点击 i, 进入编辑状态, 输入: ! Con ...

  10. oracle数据库中将clob字段内容利用java提取出至文本文档中

    代码段: 1.执行clob转String public static String ClobToString(Clob sc) throws SQLException, IOException { S ...