使用pyautogui实现坐标定位,自动化

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 慢速开始,多次反弹的形式结束的动画效果

左边为属性,右侧为运行的方式(速度+轨迹)

https://www.cnblogs.com/lihongtaoya/p/16839051.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值