使用pyautogui实现坐标定位,自动化
pyautogui是一款自动化操作库,可以根据图片定位到坐标,其原理是截取一张桌面图片,然后根据传入的图片,去查找图片在桌面上的坐标,如果按照了opencv,则会优先使用opencv,否则使用pillow使用pyautogui对上篇中的User-Agent Switcher扩展插件进行自动化切换ua,import pyautoguiimport pyperclipimport randomuser
·
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 慢速开始,多次反弹的形式结束的动画效果 |
左边为属性,右侧为运行的方式(速度+轨迹)
更多推荐




所有评论(0)