参考【知乎burning】PyAutoGUI——图形用户界面自动化
最后更新日期:2020/8/13
更新说明:补充鼠标坐标定位方法
咱中国人 就没怕过美国!为中华之崛起而读书!
pyautogui官方文档
PyAutoGUI用屏幕的xy坐标进行定位,可以控制鼠标的操作、触发键盘操作,非常适合完成windows/linux桌面系统中无聊重复的工作。
原点是屏幕左上角,向右x坐标
增大,向下y坐标
增大,绝对坐标都是正整数
。
pyautogui.size()
Size(width=2560, height=1440)
;(0, 0)
(2559, 1439)
# 当前鼠标所在坐标
Point(x=1960, y=279)
# 绝对移动 移动到(1100, 400),耗时.7秒
veTo(x=1100, y=400, duration=0.7)
# 相对移动 相对于当前鼠标位置移动偏移量(-10, -40),即往左10像素、上40像素
veRel(xOffset=-10, yOffset=-40)
# 按下左键
useDown()
# 释放左键
useUp()
# 按下释放一次左键
pyautogui.click()
# 左击一次
pyautogui.click(clicks=1, button='left', interval=0.05)
# 双击左键
pyautogui.doubleClick()
# 单击右键
pyautogui.rightClick()
# 点击中键
pyautogui.middleClick()
# 绝对拖动 默认按住左键拖动到(500, 700),用时1秒
pyautogui.dragTo(x=500, y=700, duration=1)
# 相对拖动 按住右键拖动偏移量(500, -20) 相对于当前鼠标向右500像素,向上20像素,用时1秒
pyautogui.dragRel(xOffset=500, yOffset=-20, button='right', duration=1)
# 滚动 屏幕向上滚动100像素
pyautogui.scroll(-100)
做了几个案例后,发现鼠标的定位是个难题,这里提供一个方便开发的工具:
例如我们现在写一个打开桌面回收站并清理的自动化代码,需要如下几个步骤(电脑坏了,待补充!!)
pewrite(['t', 'e', 's', 't', 'left', 'left', 'left', 'left', 'M', 'S', 'G'], interval=.2) # 英文输入 只能单个字符或者一个按键 left代表方向键
pyautogui.keyDown('w') # 按下w
pyautogui.keyUp('w') # 释放w
pyautogui.press('end') # 封装上两步操作,按下并释放end键
pyautogui.hotkey('ctrl', 'v') # 热键ctrl+v
pyautogui.hotkey('ctrl', 'v')
与下面四句同效果:
pyautogui.keyDown('ctrl')
pyautogui.keyDown('v')
pyautogui.keyUp('v')
pyautogui.keyUp('ctrl')
关于键盘操作的方法可以输入的字符串有如下:
键盘键字符串 含义
'a','b','c','A','C','1','2','3', 单个字符的键
'!','@','#'等'enter' 回车‘esc' ESC键'shiftleft','shiftright' 左右Shift键'altleft','altright' 左右Alt键'ctrlleft','ctrlright' 左右Ctrl键‘tab'(or 't') Tab键'backspace','delete' Backspace键和Delete键'pageup','pagedown' Page Up 和Page Down键'home','end' Home键和End键'up','down','left','right' 上下左右箭头键'f1','f2','f3'等 F1至F12键'volumemute','volumeup',volumedown' 静音,放大音量和减小音量键'pause' 暂停键'capslock','numlock','scrolllock' Caps Lock,Num Lock和 Scroll Lock键'insert' Insert键'printscreen' Prtsc或Print Screen键'winleft','winright' 左右Win键(在windows上)'command' Command键(在OS X上)'option' Option键(在OS X上)
暂时用到pyperclip的这一个copy功能,其他不知
再配合pyautogui.hotkey('ctrl', 'v')
复制粘贴,可以将变量con
储存的内容粘贴到某处
pyautogui
可以模拟人在图形界面移动、点击操作鼠标、键盘输入等行为,在成功尝试输入英文字符串后,发现这个库不能输入中文;
搜索一下,醒悟到可以用复制中文字符后粘贴的方式完成,于是用qq微信都做了测试:
代码如下,这个是最初学习的demo,后面还会做出更有意思的实用性的工具:
import time
import pyautogui
import pyperclipdef auto_send_msg():'''将qq/WX聊天框置顶放在屏幕右侧,程序界面缩小到可以触发为止,保证鼠标移动位置在输入框中即可''veTo(x=1100, y=400, duration=0.7)pyautogui.click(clicks=1, button='left', interval=0.05) # 点击time.sleep(1)pyautogui.press('shift') # shift 键切换英文pewrite(['t', 'e', 's', 't', 'left', 'left', 'left', 'left', 'M', 'S', 'G'], interval=.2) # 英文输入pyautogui.press('end') # end键pyautogui.press('enter') # enter键pyautogui.hotkey('ctrl', 'enter')pyautogui.keyDown('w')pyautogui.press('shift') # shift 键切换中文time.sleep(2)pyautogui.keyUp('w')pyautogui.hotkey('ctrl', 'enter')input_str = "/doge多喝热水(^U^)ノ~YO"for j in range(2):for con in input_py(con)time.sleep(0.09)pyautogui.hotkey('ctrl', 'v')time.sleep(0.09)# pyautogui.press('enter')pyautogui.hotkey('ctrl', 'enter')if __name__ == "__main__": auto_send_msg()
所用的屏幕属性如下:
qq摆放如下安排:
import time
import pyautogui
import pyperclipdef send_zhihu_comment():print("屏幕像素为", pyautogui.size())time.sleep(veTo(x=1100, y=400, duration=0.7) # 坐标移动pyautogui.click(clicks=1, button='left', interval=0.05) # 点击veRel(xOffset=-10, yOffset=-40) # 偏移移动pyautogui.click(clicks=1, button='left', interval=0.05) # 点击pyautogui.middleClick() # 单击中键veRel(xOffset=10, yOffset=20)# 滚动测试time.sleep(.veTo(x=1100, y=400, duration=0.7)pyautogui.click(clicks=1, button='left', interval=0.05) # 点击time.sleep(.5)pyautogui.scroll(-100)time.sleep(.5)pyautogui.scroll(-100)time.sleep(.5)pyautogui.scroll(-100)# 左右键和拖动测试time.sleep(2)pyautogui.doubleClick() # 双击左键time.sleep(1)pyautogui.rightClick() # 单击右键pyautogui.dragTo(x=500, y=700, duration=1)# 输入评论,中文输入测试pyautogui.click(clicks=1, button='left', interval=0.05) # 点击input_str = "up主真棒,加油!"for j in range(1):for con in input_py(con)time.sleep(0.09)pyautogui.hotkey('ctrl', 'v')time.sleep(0.09)pyautogui.dragRel(xOffset=500, yOffset=-20, duration=1)pyautogui.click(clicks=1, button='left', interval=0.05) # 点击veRel(xOffset=-100, yOffset=-100)if __name__ == "__main__":send_zhihu_comment()
代码:
import time
import pyautogui
import pyperclipdef send_zhihu_comment():print("屏幕像素为", pyautogui.size())print("鼠标位置为", pyautogui.position())time.sleep(veTo(x=1100, y=400, duration=0.7) # 坐标移动pyautogui.click(clicks=1, button='left', interval=0.05) # 点击veRel(xOffset=-10, yOffset=-40) # 偏移移动pyautogui.click(clicks=1, button='left', interval=0.05) # 点击pyautogui.middleClick() # 单击中键veRel(xOffset=10, yOffset=20)# 滚动测试time.sleep(.veTo(x=1100, y=400, duration=0.7)pyautogui.click(clicks=1, button='left', interval=0.05) # 点击time.sleep(.5)pyautogui.scroll(-100)time.sleep(.5)pyautogui.scroll(-100)time.sleep(.5)pyautogui.scroll(-100)# 左右键和拖动测试time.sleep(2)pyautogui.doubleClick() # 双击左键time.sleep(1)pyautogui.rightClick() # 单击右键pyautogui.dragTo(x=500, y=700, duration=1)# 输入评论,中文输入测试pyautogui.click(clicks=1, button='left', interval=0.05) # 点击input_str = "up主真棒,加油!"for j in range(1):for con in input_py(con)time.sleep(0.09)pyautogui.hotkey('ctrl', 'v')time.sleep(0.09)pyautogui.dragRel(xOffset=500, yOffset=-20, button='left', duration=1) # 按住左键相对拖动pyautogui.click(clicks=1, button='left', interval=0.05) # 点击veRel(xOffset=-100, yOffset=-100)def auto_send_msg():'''将qq/WX聊天框置顶放在屏幕右侧,程序界面缩小到可以触发为止,保证鼠标移动位置在输入框中即可''veTo(x=1100, y=400, duration=0.7)pyautogui.click(clicks=1, button='left', interval=0.05) # 点击time.sleep(1)pyautogui.press('shift') # shift 键切换英文pewrite(['t', 'e', 's', 't', 'left', 'left', 'left', 'left', 'M', 'S', 'G'], interval=.2) # 英文输入pyautogui.press('end') # end键pyautogui.press('enter') # enter键pyautogui.hotkey('ctrl', 'enter')pyautogui.keyDown('w')pyautogui.press('shift') # shift 键切换中文time.sleep(2)pyautogui.keyUp('w')pyautogui.hotkey('ctrl', 'enter')input_str = "多喝热水"for j in range(2):for con in input_py(con)time.sleep(0.09)pyautogui.hotkey('ctrl', 'v')time.sleep(0.09)# pyautogui.press('enter')pyautogui.hotkey('ctrl', 'enter')if __name__ == "__main__":# send_zhihu_comment()# auto_send_msg()# useInfo())# veTo(x=1227, y=329, duration=.5)# all_wins = ActiveWindowTitle()# print(all_wins)# TODO:根据图像进行定位完成和优化速度time.sleep(2)record_img = pyautogui.locateOnScreen("C:\Users\randolph\Desktop\record.png")veTo(record_img, duration=.5)pyautogui.click(clicks=1, button='left', interval=0.05)time.sleep(2)# # 自动运行# run_img = pyautogui.locateOnScreen("C:\Users\randolph\Desktop\run.png")# print(run_img)# veTo(run_img, duration=.5)# pyautogui.click(clicks=1, button='left', interval=0.05) # time.sleep(1)# 保存位置save_img = pyautogui.locateOnScreen("C:\Users\randolph\Desktop\save.png")print(save_veTo(save_img, duration=.5)pyautogui.click(clicks=1, button='left', interval=0.05) time.sleep(3)# 是# yes_img = pyautogui.locateOnScreen("C:\Users\randolph\Desktop\yes.png")# print(yes_img)# veTo(yes_img, duration=.5)# pyautogui.click(clicks=1, button='left', interval=0.05) # 测试案例auto_send_msg()time.sleep(2)# 停止记录stop_record_img = pyautogui.locateOnScreen("C:\Users\randolph\Desktop\stop_record.png")print(stop_record_veTo(stop_record_img, duration=.5)pyautogui.click(clicks=1, button='left', interval=0.05) # 自动关闭stop_img = pyautogui.locateOnScreen("C:\Users\randolph\Desktop\stop.png")print(stop_veTo(stop_img, duration=.5)pyautogui.click(clicks=1, button='left', interval=0.05)
以下分别是windows环境下LICEcap截图工具、vscode按钮和我改成黑夜模式的系统按钮,用户可以根据自己的实际情况进行修改自定义~
record.png
run.png
stop.png
save.png
stop_record.png
yes.png
本文发布于:2024-02-04 21:08:07,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170716439159622.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |