前言

由于工作需要,要利用某软件去采集数据,做重复的动作大概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. JS各种情况处理

    1.获取URL及其参数 实例:URL:file:///C:/Program%20Files/nodejs/test/jumbTarget.html?a=1&&b=2&& ...

  2. Android学习笔记——文件路径、内容Uri学习笔记[转]

    一.URI 通用资源标志符(Universal Resource Identifier, 简称"URI"). Uri代表要操作的数据,Android上可用的每种资源 - 图像.视频 ...

  3. Python 操作 Excel 、txt等文件

    #xlrd 读取excel import xlrd import os #获取文件路径 filepath = os.path.join(os.getcwd(),'user_info') #获取文件名称 ...

  4. Struts2的多方法动态Action

    原创 一个简单的Action里面的核心方法只有一个execute(); 定义多个核心方法的Action,有如下3种方式: 为Action配置method属性 动态方法调用 使用通配符映射方式 动态方法 ...

  5. alpha七天冲刺计划

    alpha七天冲刺计划(更新ing) 第一天:https://www.cnblogs.com/renluqian/p/9895895.html 第二天: 第三天: 第四天: 第五天: 第六天: 第七天 ...

  6. Delphi xe5如何使用Bluestacks模拟器(用真机或者用猩猩,夜神模拟器,自带的不好用)

    首先,关于这个模拟器问题比较纠结,这是一个关于adb的问题. Delphi XE5会自动识别模拟器和真机,但是你必须先打开模拟器在打开Delphi IDE(Delphi开发环境),否则还得麻烦一会儿. ...

  7. XE10开发的APP对于苹果IPV6上架要求的处理(DelphiTeacher)

    1.服务器必须使用域名.不能使用IP地址2.Indy的话,域名加[]3.DataSnap的话,Params.Values['CommunicationIPVersion'] :='IP_IPv6';4 ...

  8. [LeetCode 题解]: Permutations

    Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the follow ...

  9. [Erlang16]为什么要用MFA代替fun()–>end?

    MFA:Module Function Arguments. 首先你要知道Module:Func(Args)和Func(Args)的区别在哪里? 如果对细节感兴趣,可以通过这里了解:http://ww ...

  10. 启动类加注解@MapperScan spring boot mybatis 启动错误

    Description: Field userDao in com.gcy.springsecuritydemo.service.user.UserService required a bean of ...