P-1.3.1 学习使用PyUserInput并用Python模拟鼠标的拖动(转)
本文链接:https://blog.csdn.net/frankfrankflb/article/details/79003423
在P-1.3中我成功地安装了PyUserInput模块现在我要学习如何使用它控制鼠标键盘
首先
1 from pymouse import PyMouse 2 from pykeyboard import PyKeyboard
当我疑惑为什么要用from xxx import xxx时一个知乎答主解答了我的疑惑
真感谢你呀:>
的确,from random import randint之后可以直接使用randint指令而不用输入random.randint指令了。
接下来建立一个鼠标和键盘的对象:
1 m = PyMouse() 2 k = PyKeyboard()
(ok,不用特别输入pymouse.PyMouse了)
And I’ve found out that I can replace an order with a “mark”, as follows:
1 >>> m=print 2 >>> m('a') 3 a 4 >>> m=random 5 >>> m.randint(1,2) 6 1 7 >>> m=random.randint 8 >>> m(1,2) 9 2 10 >>> m=random.randint(1,2) 11 >>> m 12 2 13 >>>
Of course, I must note that:
1 >>> print=random 2 >>> print('Does it work?') 3 Traceback (most recent call last): 4 File "<pyshell#50>", line 1, in <module> 5 print('Does it work?') 6 TypeError: 'module' object is not callable 7 >>>
Well, it doesn’t work anymore
anyway
快速学习新代码的方式之一是写一个小程序,程序如下:
1 from pymouse import PyMouse 2 import time 3 m = PyMouse() 4 (x,y)=m.position()#获取当前坐标的位置 5 time.sleep(1) 6 m.move(x,y)#鼠标移动到xy位置 7 print (x,y)
其中import time库使用time.sleep(x)函数是因为我希望让程序暂停一小段时间
关于time.sleep:
1) Note that using the function “time.sleep(x)”means that you must wait after you use the “KeyboardInterrupt” (Ctrl+C in IDLE),during the sleeping period.
2) “让程序执行暂停指定的秒数,参数可以是浮点型以指定精确的时间,但是程序真正暂停的时间可能长于请求的时间也可能短于暂停的时间。”
pykeyboard库也是类似的用法。Mouse与Keyboard的具体指令可以参照网络或者在IDLE中用自动完成功能(TAB键)一个个取出来尝试。
下面写一个模拟鼠标拖动的小程序作为练习:
1 from pymouse import PyMouse#import pymouse类 2 from time import sleep#import time类 3 from math import atan,pi,sin,cos#import一些数学函数和pi 4 5 sgn = lambda x: 1 if x > 0 else -1 if x < 0 else 0 6 #自定义函数lamdax(x1,x2...): lambdax1,x2... 等于y11,y12...(当[条件1]),而在[条件1]以外的情况下等于y21,y22...(当[条件2]),...,在[条件n]以外的情况下等于yn1,yn2... ,必须在全集中有定义# 7 non0 = lambda x:1/1e99 if x==0 else x#使0变成极为逼近0的量的函数 8 #low10 = lambda x:10 if x>=10 else -10 if x <= -10 else x#最终没有用上的限制函数 9 switch,x,y,xt,yt=1,0,0,0,0#发现可以在一行定义多个变量了 10 m=PyMouse() 11 #以下两行定义了目的坐标 12 sleep(2) 13 c=m.position()#c for coordinate 14 15 while switch==1: 16 c_=m.position()#获取目前的位置 17 (x,y),(xt,yt)=c,c_#可以这样定义横纵坐标的大小 18 d=(((xt-x)**2+(yt-y)**2)**0.25) 19 #利用距离改变移动的幅度与方向精度(精度与幅度成正比,幅度越大,靠近目的坐标时越难settle,精度越小,消耗的路程越长。故需要精度与靠近程度成正比) 20 #试了>1的指数配合low10函数,但这种函数变化太快了,效果不好 21 dx,dy=sgn(xt-x),-sgn(yt-y) 22 k=-(yt-y)/non0(xt-x) 23 o_=0.5*(1-dx)*pi+atan(k)#此处我利用判断命令,制作了由(k,dx)到o_的映射,也是{x到arctan(x)函数向上延伸一个周期的隐函数图像}的"映射",由于此隐函数图像不对称,所以此函数的输出也不与k对称。而用arccosx可以得到一个对称的函数 24 #其实这里只是我想建立x到一个隐函数图像的映射,所以我需要第三个条件变量 25 xd,yd=cos(o_-pi),sin(o_-pi)#这是以鼠标位置为原点的(以屏幕为基准的)直角坐标系上指向目的坐标的方向向量。 26 27 m.move(xt+(round(d*xd)),yt-(round(d*yd))) #在方向向量前乘一个系数再取整,得到本次移动的恰当像素数及方向 28 sleep(0.01)#避免鼠标移动过快
在这个小程序的基础上,可以做出一些有意思的拓展,如果再作出一些精简,可能非常实用
1/9日批注:
autopy3
//autopy是一个自动化操作的python库,可以模拟一些鼠标、键盘事件,还能对屏幕进行访问 |
Pillow
//Pillow是PIL的一个派生分支,但如今已经发展成为比PIL本身更具活力的图像处理库。 |
安装autopy3之前需要安装OpenGL和Libpng
===============================
OpenGL pip安装就可以了 我就不多说了 我用的IDE是pycharm直接用IDE安装的 Libpng的话安装稍微麻烦一点可以看下面这个帖子是MAC安装Libpng的例子! 点击打开链接 |
===============================
1 import autopy3 as autopy,PIL 2 3 autopy.mouse.move(100, 100) # 移动鼠标 4 autopy.mouse.smooth_move(300, 300) # 平滑移动鼠标(上面那个是瞬间的) 5 6 autopy.mouse.click() # 单击 7 autopy.mouse.toggle(True) # 按下左键 8 autopy.mouse.toggle(False) # 松开左键
未经尝试,这是更简便的模拟拖动方法
引用自网络