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

pyautogui是一款自动化操作库,可以根据图片定位到坐标,其原理是截取一张桌面图片,然后根据传入的图片,去查找图片在桌面上的坐标,如果按照了opencv,则会优先使用opencv,否则使用pillow。

pyautuogui的方法可以参考https://blog.csdn.net/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

pyautogui是一个Python库,可以用于自动化鼠标和键盘操作。它提供了一些功能来进行图像识别和定位,以便在屏幕上找到特定的图像并进行操作。 要使用pyautogui进行图片识别定位,你需要先准备好要查找的目标图像。然后,可以使用pyautogui的`locateOnScreen()`函数来在屏幕上查找该图像的位置。该函数会返回一个包含目标图像位置的矩形对象。 以下是使用pyautogui进行图片识别定位的基本步骤: 1. 导入pyautogui库:`import pyautogui` 2. 准备目标图像:将目标图像保存在本地,并确保图像文件的路径是正确的。 3. 使用`locateOnScreen()`函数进行图像识别定位:`location = pyautogui.locateOnScreen('目标图像路径')` 4. 检查是否找到了目标图像:可以使用条件判断来检查`location`是否为None,如果不为None,则表示找到了目标图像。 5. 获取目标图像的位置信息:可以使用`location`对象的属性来获取目标图像的位置信息,例如:`x = location.left, y = location.top, width = location.width, height = location.height` 注意事项: - 确保目标图像在屏幕上是可见的,并且与实际屏幕上的图像相匹配。 - 如果目标图像在屏幕上有多个匹配项,`locateOnScreen()`函数将返回第一个匹配项的位置。 - 如果无法找到目标图像,可以尝试调整图像的大小、分辨率或使用其他图像处理技术来提高识别的准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值