python关于威尼斯人平台搭建win32api与ImageGrab.grab()截屏少内容的问题

前提:和系统威尼斯人平台搭建论坛:haozbbs.com Q1446595067 有关系。有的不少内容,有的少。我是在测试环境下一点问题都没有,结果跑到生产环境就不行了。由于生产环境不能重装系统等因素,所有采用了本文的解决方案。

系统环境:win7 x64

项目介绍:使用pyautogui对pc端应用程序做自动化操作。

项目一开始使用的pyautogui.locateOnScreen("xxx.png")来定位,使用pyautogui.click()来实现点击,使用typewrite("xxx")来实现文本的输入。

本身项目难度不大,但是问题就出在生产环境下locateOnScreen()定位不到弹窗内容,一开始以为是cpu等硬件问题,导致截图延迟造成的(毕竟locateOnScreen的效率还是挺低的,一般全屏识别需要3-6s的时间)。所以就想着先把图片截取下来,然后再用locate本地对比识别。

随后就采用pyautogui.screenshot()来截屏,但是发现还是不行,当时认为是截取的太快了,因为screenshot的还是挺快的,1920*1080的截屏也只需要100ms,担心是tooltip(悬浮提示)还没有出来就截屏了,所以就加了time.sleep(1)来延迟截屏。但是结果还是没有东西,就想到是不是这个函数是异步处理的,不会等待sleep的执行完成,在这里走了一些弯路。

翻看了pyautogui的源码,发现screenshot在win下采用的是PIL的ImageGrab.grab()来实现的截屏。就用PIL模拟了一下screenshot的过程,结果还是截取不到tooltip。随后用了win32api的截图方法,结果还是截取不到。显然用win32api的效率已经是非常高了,当时又加了一些延迟,但是还是不行。

# import time
# import win32gui,win32ui,win32con,win32api
# def window_capture(filename):
#   hwnd=0

#   hwndDC=win32gui.GetWindowDC(hwnd)

#   mfcDC = win32ui.CreateDCFromHandle(hwndDC)

#   saveDC=mfcDC.CreateCompatibleDC()

#   saveBitMap=win32ui.CreateBitmap()

#   MoniterDev=win32api.EnumDisplayMonitors(None,None)

#   w=MoniterDev[0][2][2]
#   h=MoniterDev[0][2][3]

#   saveBitMap.CreateCompatibleBitmap(mfcDC,w,h)

#   saveDC.SelectObject(saveBitMap)

#   saveDC.BitBlt((0,0),(w,h),mfcDC,(0,0),win32con.SRCCOPY)
#   saveBitMap.SaveBitmapFile(saveDC,filename)

# window_capture("2.png")

最后无奈,只好手动测试,到底为什么没有截取到(截至目前,没不知道原因是截取不到,一直还认为可能是延迟、程序异步的问题)。为了方便记录截图的时间,所以就想到了用个小工具显示再屏幕上,找工具太麻烦,就用了win7的小工具--时钟。这个就是问题的突破口。用了这个之后,发现之前的程序都截取不到这个小工具。又经过一系列的测试断定是截图函数的问题。

测试使用prtsc截图快捷键可以。所以才有了最后的方案,同样是采用win32api,但是需要用到快捷键截屏,并且需要用到剪切板来存储截图。

win32api.keybd_event(win32con.VK_SNAPSHOT, 0)
time.sleep(0.5)
im=ImageGrab.grabclipboard()
im.save("screen.png")

问题解决,用时5-6个小时。

原文地址:http://blog.51cto.com/13857162/2137866

时间: 2024-08-07 22:06:48

python关于威尼斯人平台搭建win32api与ImageGrab.grab()截屏少内容的问题的相关文章

使用python一步一步搭建微信公众平台(一)

最近无聊,想玩玩微信的公众平台,后来发现乐趣无穷啊~ 使用的工具,python 新浪SAE平台,微信的公众平台 你需要先在微信的公众平台与新浪SAE平台上各种注册,微信平台注册的时候需要你拍张手持身份证的照片,还有几天的审核期 微信公众平台:http://mp.weixin.qq.com 新浪SAE:http://sae.sina.com.cn/ 等待微信公众审核通过后,登录公众平台后,点击高级功能.将会看到需要提供一个接入信息: 微信接口配置 那么我们需要一个网址作为接口(这时就需要SAE上搭

Python之微信H5斗牛出租平台搭建数据结构基础

微信H5斗牛出租平台搭建下载网站:h5.fanshubbs.com联系Q1687054422一.数据结构基础 a.什么是数据结构 b.数据结构的分类 c.列表 列表d.栈 二.栈的Python实现 a.栈的应用--括号匹配为题 括号匹配实现b.队列 c.队列的实现 d.队列的实现原理--环形队列 e.队列的实现原理--环形队列 ![](http://i2.51cto.com/images/blog/201802/03/07e08bf827bebcb6e258e9ccfd28f20a.jpg?x-

python paramiko模块幸运飞艇平台搭建实现跨平台SSH

需求:在幸运飞艇平台搭建论坛:haozbbs.com Q1446595067 管理用户端(实际上所有支持Python的OS都可以)批量对远程服务器进行部署.命令执行.文件传输.搭建测试环境等. 一般的,我们用Putty,Xshell,Winscp都可以实现SSH登录,但是如果出现N台服务器,我们按照原来的方法,需要逐个登录配置,这会花费一定的时间.实际上,Python的paramiko模块就可以实现这种操作.其原理就是模拟SSH客户端,与SSH服务端进行交互,实现登录与命令的实时传输.Param

Python的time库和文本进度条 大发彩_票平台搭建

大发彩_票平台搭建 地址一:[hubawl.com]狐霸源码论坛地址二:[bbscherry.com] 是Python中处理时间的标准库1.time库包括三类函数 时间获取:time() ctime() gmtime()时间格式化:strftime() strptime()程序计时:sleep(), perf_counter()2.时间获取 3.时间格式化 4.程序计时 5.进度条实例 #textProBarV1.pyimport timescale = 50print("执行开始".

php五分Pk10平台搭建调用python文件

以前小组开展项目实训,五分Pk10平台搭建[企鹅21717-93408]我们小组选择的是大数据分析,其中有一个用python进行文本分析之后对用户输入的数据进行分析,然后输出对应的岗位及其他.要求是前端将文本要求传到后台php,php调用python程序处理,再将数据传给php,然后再传到前端,进行下一步处理.结果python传回的数据,在前端显示乱码了,而且得出的结果与单独运行python代码完全不同,一句话,就是php调用python程序期间出错了. ? ? ? ? ? 我很认真的检查了好几

源代码实现LAMP的平台搭建

1.LAMP简介 Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台.随着开源潮流的蓬勃发展,开放源代码的LAMP已经与J2EE和.Net商业软件形成三足鼎立之势,并且该软件开发的项目在软件方面的投资成本较低,因此受到整个IT界的关注.从网站的流量上来说,70%以上的访问流量是LAMP来提供的,LAMP是最强

LAMP平台搭建详解

准备工作 安装编译工具 # yum -y install gcc # yum -y install gcc-c++ 如果系统之前已经安装有rpm包的mysql和apache,那么可以: #service httpd stop #service mysqld stop 确定rpm包安装的httpd和mysqld不能开机启动 #chkconfig –level 2345 mysqld/httpd stop 关闭SELINUX和防火墙,或者允许防火墙开放相关端口,apache 80端口,mysql 3

cocos2d-x 3.0 WIN7+VS2012 安卓平台搭建

***************************************转载请注明出处:http://blog.csdn.net/lttree****************************************** 题外话: 暑假,重拾cocos2d-x,一年没有接触了,更新到3.0,搭建安卓环境不需要cygwin了.简单了好多呀,就是新建的时候有点麻烦= =. 正文: 一.前期准备工作: 准备几个软件: 1.JDK    地址:http://www.oracle.com/te

超详细java中 大发彩_票平台搭建 的ClassLoader详解

ClassLoader翻译过来就是类加载器,普通的java开发者其实用到的不多,但对于某些框架开发者来说却非常常见.理解ClassLoader的加载机制,也有利于我们编写出更高效的代码.ClassLoader的具体作用就是将class文件加载到jvm虚拟机中去,程序就可以正确运行了.但是,jvm启动的时候,并不会一次性加载所有的class文件,而是根据需要去动态加载.想想也是的,一次性加载那么多jar包那么多class,那内存不崩溃.本文的目的也是学习ClassLoader这种加载机制. 大发彩