前言

由于工作需要,要利用某软件去采集数据,做重复的动作大概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. 解决Visual C++工程中包含 .c 或cpp文件编译时产生的.pch预编译头错误(C1853)的办法

    2014-01-17 23:36 5128人阅读 评论(1) 收藏 举报 分类: 资料集(282) 版权声明:本文为博主原创文章,未经博主允许不得转载. 之前使用网上的一个开源代码,被封装成Windo ...

  2. WebService搭建

    好久没有用WebService了,今天想复习一下原来的技术,结果错误百出. 这几天重装了系统,所有的东西都要重新配置,导致了很多原来没有发生过的问题,在这里做个笔记,希望以后不会再有这样的错误.

  3. 初涉Runtime (一)

    Objective-C 是一门动态语言,有很多东西都是运行时才确定的. 比如这句代码首先声明testObject是一个NSString,然后创建了一个NSData对象,并且将这个对象的内存地址保存在t ...

  4. SVN版本控制服务

    1>Subversion版本控制简介: Subversion(SVN)是一款自由开放的版本控制软件,可以管理文件,文件夹以及记录他们的修改状况,常用来帮助我们管理软件开发的源代码或是公司手册文档 ...

  5. select2的一些隐藏功能

    select 3.5版本的说明文档里面存在 http://select2.github.io/select2/index.html option选项 sortResults query为查询字符串

  6. [转发]Oauth 1.0 1.0a 和 2.0 的之间的区别有哪些?

    原文地址:http://www.zhihu.com/question/19851243

  7. centos7 安装dnf包管理器和常用命令

    Installing DNF Currently the DNF package comes from the EPEL repository, so if your Linux system is ...

  8. python学习之路 八 :面向对象编程基础

    本节重点 了解面向对象.面向过程的区别 掌握什么是类,什么是对象 掌握如何定义及使用类和对象 了解类与对象间的关系 掌握类属性和实例属性 掌握绑定方法 一.编程范式 ​    ​编程即写程序or写代码 ...

  9. 使用PLSQL Developer时中文乱码问题

    使用PLSQL Developer时中文乱码问题 一.问题: 执行一些查询结果有中文的SQL语句,显示不了中文,显示???. 二.产生的原因: 客户端与服务器端的编码不一致造成的. 三.解决方案: 1 ...

  10. jquery call cross-domain webapi owin self-host

    <!DOCTYPE HTML> <html LANG="cn"> <head> <meta name="viewport&quo ...