pyautogui是一款自动化操作库,可以根据图片定位到坐标,其原理是截取一张桌面图片,然后根据传入的图片,去查找图片在桌面上的坐标,如果按照了opencv,则会优先使用opencv,否则使用pillow。
pyautuogui的方法可以参考https://blog.youkuaiyun.com/qq350146607/article/details/99409295 这篇文章,或者鼠标点在pyautogui方法上,按ctrl+B查看源码
使用pyautogui对上篇中的User-Agent Switcher扩展插件进行自动化切换ua,
import pyautogui
import pyperclip
import random
useragents=['Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36','Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36']
ua_refresh.png
ua0.png
ua1.png
ua2.png
ua3.png
ua40.png
ua41.png
ua42.png
ua5.png
#def _locateAll_opencv(needleImage, haystackImage, grayscale=None, limit=10000, region=None, step=1, confidence=0.999)
# confidence 置信度默认为0.999
# grayscale设置是否按照灰度查找,grayscale=True给定位函数以提供轻微加速
def left_click(path): #左键点击
left_click1 = pyautogui.locateOnScreen(path, confidence=0.85)
print('left_click1::', left_click1) # 返回屏幕所在位置
if left_click1:
url_x, url_y = pyautogui.center(left_click1)
pyautogui.leftClick(url_x, url_y)
return True
return False
def change_ua():
ua=random.choice(useragents)
for i in range(2):
result0 = left_click('./images/ua{}.png'.format(i))
if result0:
break
result2 = left_click('./images/ua2.png')
result3 = left_click('./images/ua3.png')
result4 = left_click('./images/ua40.png')
for j in range(1,3):
result5 = left_click('./images/ua4{}.png'.format(j))
if result5:
pyautogui.hotkey('ctrl','a')
pyautogui.hotkey('backspace')
pyperclip.copy(ua)
pyautogui.hotkey('ctrl', 'v')
pyautogui.press('enter')
result6 = left_click('./images/ua_refresh.png')
left_click('./images/ua5.png')
pyperclip 执行鼠标复制,pyautogui.hotkey执行快捷键,pyautogui的缺点是可移植性差,根据图片定位,浏览器界面尺寸稍微变化,就会定位不到
保持浏览器始终前置,并固定其位置
titlename = pyautogui.getActiveWindowTitle()
hwnd = win32gui.FindWindow(0, titlename) #获取句柄
left, top, right, bottom = win32gui.GetWindowRect(hwnd)
win32gui.SetWindowPos(hwnd,win32con.HWND_TOPMOST,0, 0, 1061, 878, win32con.SWP_SHOWWINDOW)
import pyautogui #寻找 1.png 在图片 20230407160730.png 中的坐标位置,confidence置信度,grayscale是否灰度 location = pyautogui.locate('1.png', '20230407160730.png', confidence=0.65, grayscale=True) print(location)
import win32api, win32con import pyautogui def left_click(): path = '2.jpg' location = pyautogui.locateOnScreen(path, confidence=0.85, grayscale=True) print(location) centers = pyautogui.center(location) print(centers) # 移到到目标位置 pyautogui.moveTo(centers.x, centers.y) time.sleep(2) # 鼠标左键点击 win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) # 抬起鼠标 win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
# 缓动/渐变函数可以改变光标移动过程的速度和方向。通常鼠标是匀速直线运动,这就是线性缓动/渐变函数。 # PyAutoGUI有30种缓动/渐变函数,可以通过pyautogui.ease*?查看。 # tween:鼠标移动到指定位置的规律,默认匀速直线运行(linear) # x,y表示坐标 # duration 间隔时间(秒) # 开始很慢,不断加速(从鼠标当前位置在2秒内移动到(100,100)位置,轨迹在图第1行第1个 pyautogui.moveTo(x=100, y=100, duration=2, tween=pyautogui.easeInQuad) # 开始很快,不断减速, 轨迹在图第1行第2个 pyautogui.moveTo(x=100, y=100, duration=2, tween=pyautogui.easeOutQuad) # 开始和结束都快,中间比较慢, 轨迹在图第1行第3个 pyautogui.moveTo(x=100, y=100, duration=2, tween=pyautogui.easeInOutQuad) # 一步一徘徊前进 , 轨迹在图in 列的 Bounce行 pyautogui.moveTo(x=100, y=100, duration=2, tween=pyautogui.easeInBounce) # 徘徊幅度更大,甚至超过起点和终点 , 轨迹在图in 列的 Elastic 行 pyautogui.moveTo(x=100, y=100, duration=2, tween=pyautogui.easeInElastic)
easeInQuad 较慢的速度开始,以二次方曲线结束的动画效果 | |
easeOutQuad 较快的速度开始,以二次方曲线结束的动画效果 | |
easeInOutQuad慢速开始,慢速结束,用二次方曲线来模拟动画过渡效果 | |
easeInCubic 较快速度开始,慢速结束,用三次方曲线模拟动画过渡效果 | |
easeOutCubic 较快的速度开始,以三次方曲线结束的动画效果 | |
easeInOutCubic 中等速度开始,以三次方曲线结束的动画效果 | |
easeInQuart 较慢的速度开始,以四次方曲线结束的动画效果 | |
easeOutQuart 较快的速度开始,以四次方曲线结束的动画效果 | |
easeInOutQuart 中等速度开始,以四次方曲线结束的动画效果 | |
easeInQuint 较慢的速度开始,以五次方曲线结束的动画效果 | |
easeOutQuint 较快的速度开始,以五次方曲线结束的动画效果 | |
easeInOutQuint 中等速度开始,以五次方曲线结束的动画效果 | |
easeInSine 较快的速度开始,以正弦曲线结束的动画效果 | |
easeOutSine 较慢的速度开始,以正弦曲线结束的动画效果 | |
easeInOutSine 中等速度开始,以正弦曲线结束的动画效果 | |
easeInExpo 较慢的速度开始,指数函数曲线结束的动画效果 | |
easeOutExpo 较快的速度开始,指数函数曲线结束的动画效果 | |
easeInOutExpo 中等速度开始,指数函数曲线结束的动画效果 | |
easeInCirc 较慢的速度开始,圆形的运动结束的动画效果 | |
easeOutCirc 较快的速度开始,圆形的运动结束的动画效果 | |
easeInOutCirc 中等速度开始,圆形的运动结束的动画效果 | |
easeInElastic 较慢的速度开始,伴随着弹性的形式结束的动画效果 | |
easeOutElastic 较快的速度开始,伴随着弹性的形式结束的动画效果 | |
easeInOutElastic 中等速度开始,伴随着弹性的形式结束的动画效果 | |
easeInBack 较慢的速度开始,伴随着振荡的形式结束的动画效果 | |
easeOutBack 较快的速度开始,伴随着振荡的形式结束的动画效果 | |
easeInOutBack 中等速度开始,伴随着振荡的形式结束的动画效果 | |
easeInBounce 较慢的速度开始,多次反弹的形式结束的动画效果 | |
easeOutBounce 快速开始,然后以多次反弹的形式结束的动画效果 | |
easeInOutBounce 慢速开始,多次反弹的形式结束的动画效果 |
左边为属性,右侧为运行的方式(速度+轨迹)