pyautogui问题解决方案记录(因为使用了:pyautogui.locateCenterOnScreen(img, confidence=0.9))

本文介绍了在Windows环境下,如何使用pip安装PyAutoGUI库及其依赖Pillow和OpenCV。在遇到依赖问题时,通过设置pip的国内源来加速并成功安装这些库。此外,还展示了当使用pyautogui.locateCenterOnScreen函数时,为何需要Pillow和OpenCV以及相应的安装方法。
该文章已生成可运行项目,

本人环境:win10 1909. Python 3.9.13

不想多余看,只想直接解决,直接安装下面的库

pip install pyautogui
pip install pillow
pip install opencv-python

# 我安装的版本信息
C:\Users\gsp>pip list
Package       Version
------------- --------
MouseInfo     0.1.3
numpy         1.23.5
opencv-python 4.6.0.66
Pillow        9.3.0
pip           22.3.1
PyAutoGUI     0.9.53

pip永久设置成国内源

其实就是写了个配置文件。我的是:C:\Users\gsp\AppData\Roaming\pip\pip.ini

# 清华源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 阿里源
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
# 腾讯源
pip config set global.index-url http://mirrors.cloud.tencent.com/pypi/simple
# 豆瓣源
pip config set global.index-url http://pypi.douban.com/simple/

安装pyautogui没什么难度,直接pip

pip install pyautogui

# 如果临时从国内源安装
pip install pyautogui -i https://pypi.tuna.tsinghua.edu.cn/simple

由于使用pyautogui.locateCenterOnScreen,需要Pillow

没装Pillow前的报错信息

  File "C:\Users\gsp\Desktop\XXX.py", line 34, in getlocation
    location = pyautogui.locateCenterOnScreen(img, confidence=0.9)
  File "C:\all_software\Python\Python39\lib\site-packages\pyautogui\__init__.py", line 175, in wrapper
    return wrappedFunction(*args, **kwargs)
  File "C:\all_software\Python\Python39\lib\site-packages\pyautogui\__init__.py", line 207, in locateCenterOnScreen
    return pyscreeze.locateCenterOnScreen(*args, **kwargs)
  File "C:\all_software\Python\Python39\lib\site-packages\pyscreeze\__init__.py", line 413, in locateCenterOnScreen
    coords = locateOnScreen(image, **kwargs)
  File "C:\all_software\Python\Python39\lib\site-packages\pyscreeze\__init__.py", line 372, in locateOnScreen
    screenshotIm = screenshot(region=None) # the locateAll() function must handle cropping to return accurate coordinates, so don't pass a region here.
  File "C:\all_software\Python\Python39\lib\site-packages\pyscreeze\__init__.py", line 144, in wrapper
    raise PyScreezeException('The Pillow package is required to use this function.')
pyscreeze.PyScreezeException: The Pillow package is required to use this function.

安装命令

pip install pillow

由于使用confidence参数,需要OpenCV

没装OpenCV 前的报错信息

  File "C:\Users\gsp\Desktop\XXX.py", line 34, in getlocation
    location = pyautogui.locateCenterOnScreen(img, confidence=0.9)
  File "C:\all_software\Python\Python39\lib\site-packages\pyautogui\__init__.py", line 175, in wrapper
    return wrappedFunction(*args, **kwargs)
  File "C:\all_software\Python\Python39\lib\site-packages\pyautogui\__init__.py", line 207, in locateCenterOnScreen
    return pyscreeze.locateCenterOnScreen(*args, **kwargs)
  File "C:\all_software\Python\Python39\lib\site-packages\pyscreeze\__init__.py", line 413, in locateCenterOnScreen
    coords = locateOnScreen(image, **kwargs)
  File "C:\all_software\Python\Python39\lib\site-packages\pyscreeze\__init__.py", line 373, in locateOnScreen
    retVal = locate(image, screenshotIm, **kwargs)
  File "C:\all_software\Python\Python39\lib\site-packages\pyscreeze\__init__.py", line 353, in locate
    points = tuple(locateAll(needleImage, haystackImage, **kwargs))
  File "C:\all_software\Python\Python39\lib\site-packages\pyscreeze\__init__.py", line 253, in _locateAll_python
    raise NotImplementedError('The confidence keyword argument is only available if OpenCV is installed.')
NotImplementedError: The confidence keyword argument is only available if OpenCV is installed.

安装命令

由于opencv-python依赖numpy,所以会自动安装numpy

pip install opencv-python
本文章已经生成可运行项目
下面这个代码里面的pyautogui.locateCenterOnScreen(img, confidence=0.9)在这个片段运行有问题错误是Parameter(s) unfilledPossible callees:locateCenterOnScreen(image: str | Image, *, minSearchTime: float, grayscale: bool | None = None, limit: object = 1, region: tuple[int, int, int, int] | None = None, step: int = 1, confidence: SupportsFloat | SupportsIndex | str | Buffer | Buffer = 0.999)locateCenterOnScreen(image: str | Image, *, minSearchTime: float, grayscale: bool | None = None, limit: object = 1, region: tuple[int, int, int, int] | None = None, step: int = 1, confidence: None = None),请给出修改无误后的代码def mouseClick(click_times, lOrR, img, re_try): """ 定义鼠标事件 :param click_times: :param lOrR: :param img: :param re_try: :return: """ if re_try == 1: while True: location = pyautogui.locateCenterOnScreen(img, confidence=0.9) if location is not None: pyautogui.click(location.x, location.y, clicks=click_times, interval=0.2, duration=0.2, button=lOrR) break print("未找到匹配图片,0.1秒后重试") time.sleep(0.1) elif re_try == -1: while True: location = pyautogui.locateCenterOnScreen(img, confidence=0.9) if location is not None: pyautogui.click(location.x, location.y, clicks=click_times, interval=0.2, duration=0.2, button=lOrR) time.sleep(0.1) elif re_try > 1: i = 1 while i < re_try + 1: location = pyautogui.locateCenterOnScreen(img, confidence=0.9) if location is not None: pyautogui.click(location.x, location.y, clicks=click_times, interval=0.2, duration=0.2, button=lOrR) print("重复") i += 1 time.sleep(0.1)
03-22
import pyautogui import time import xlrd import pyperclip import time import os def mouseClick(clickTimes, lOrR, img, reTry): def mouseClickAll(clickTimes, lOrR, img, reTry, multi=False): if reTry == 1: while True: # 关键修改:使用 locateAllOnScreen 获取所有匹配位置 locations = list(pyautogui.locateAllOnScreen(img, confidence=0.9)) if locations: for loc in locations: center = pyautogui.center(loc) pyautogui.click(center.x, center.y, clicks=clickTimes, interval=0.2, duration=0.2, button=lOrR) # 添加对象间操作间隔 time.sleep(0.9) break print("未找到匹配图片,0.1秒后重试") time.sleep(0.1) elif reTry == -1: while True: location = pyautogui.locateCenterOnScreen(img, confidence=0.9) if location is not None: pyautogui.click(location.x, location.y, clicks=clickTimes, interval=0.2, duration=0.2, button=lOrR) time.sleep(0.1) elif reTry > 1: i = 1 while i < reTry + 1: location = pyautogui.locateCenterOnScreen(img, confidence=0.9) if location is not None: pyautogui.click(location.x, location.y, clicks=clickTimes, interval=0.2, duration=0.2, button=lOrR) print("重复") i += 1 time.sleep(0.1) # 定义热键事件 # hotkey_get方法用来判断热键组合个数,还是文字输入。 def hotkey_get(hk_g_inputValue): try: newinput = hk_g_inputValue.split(&#39;,&#39;) pyautogui.hotkey(*tuple(newinput)) except: pyperclip.copy(hk_g_inputValue) pyautogui.hotkey(&#39;ctrl&#39;, &#39;v&#39;) # hotkey_get方法用来判断热键组合个数,并把热键传到对应的变量上newinput[0],[1],[2],[3]……[9]只写了10个后续可以添加。【老方法弃用】 # hotkey_Group方法调用hotkey_get方法,并判断其热键内容是否需要循环。 def hotkeyGroup(reTry, hkg_inputValue): if reTry == 1: hotkey_get(hkg_inputValue) print("执行了:", hkg_inputValue) time.sleep(0.1) elif reTry == -1: while True: hotkey_get(hkg_inputValue) print("执行了:", hkg_inputValue) time.sleep(0.1) elif reTry > 1: i = 1 while i < reTry + 1: hotkey_get(hkg_inputValue) print("执行了:", hkg_inputValue) i += 1 time.sleep(0.1) # cmdType.value 1.0 左键单击 2.0 左键双击 3.0 右键单击 4.0 输入 5.0 等待 6.0 滚轮 # 7.0 热键组合(最多4个) # 8.0 粘贴当前时间 # 9.0 系统命令集 # ctype 空:0 # 字符串:1 # 数字:2 # 日期:3 # 布尔:4 # error:5 def dataCheck(sheet1): checkCmd = True # 行数检查 if sheet1.nrows < 2: print("没数据啊哥") checkCmd = False # 每行数据检查 i = 1 while i < sheet1.nrows: # 第1列 操作类型检查 cmdType = sheet1.row(i)[0] if cmdType.ctype != 2 or (cmdType.value != 1.0 and cmdType.value != 2.0 and cmdType.value != 3.0 and cmdType.value != 4.0 and cmdType.value != 5.0 and cmdType.value != 6.0 and cmdType.value != 7.0 and cmdType.value != 8.0 and cmdType.value != 9.0): print(&#39;第&#39;, i + 1, "行,第1列数据有毛病") checkCmd = False # 第2列 内容检查 cmdValue = sheet1.row(i)[1] # 读图点击类型指令,内容必须为字符串类型 if cmdType.value == 1.0 or cmdType.value == 2.0 or cmdType.value == 3.0: if cmdValue.ctype != 1: print(&#39;第&#39;, i + 1, "行,第2列数据有毛病") checkCmd = False # 输入类型,内容不能为空 if cmdType.value == 4.0: if cmdValue.ctype == 0: print(&#39;第&#39;, i + 1, "行,第2列数据有毛病") checkCmd = False # 等待类型,内容必须为数字 if cmdType.value == 5.0: if cmdValue.ctype != 2: print(&#39;第&#39;, i + 1, "行,第2列数据有毛病") checkCmd = False # 滚轮事件,内容必须为数字 if cmdType.value == 6.0: if cmdValue.ctype != 2: print(&#39;第&#39;, i + 1, "行,第2列数据有毛病") checkCmd = False # 7.0 热键组合,内容不能为空 if cmdType.value == 7.0: if cmdValue.ctype == 0: print(&#39;第&#39;, i + 1, "行,第2列数据有毛病") checkCmd = False # 8.0 时间,内容不能为空 if cmdType.value == 8.0: if cmdValue.ctype == 0: print(&#39;第&#39;, i + 1, "行,第2列数据有毛病") checkCmd = False # 9.0 系统命令集模式,内容不能为空 if cmdType.value == 9.0: if cmdValue.ctype == 0: print(&#39;第&#39;, i + 1, "行,第2列数据有毛病") checkCmd = False i += 1 return checkCmd # 任务 def mouseClickAll(clickTimes, lOrR, img, reTry): if reTry == 1: # 单次尝试 while True: locations = list(pyautogui.locateAllOnScreen(img, confidence=0.9)) if locations: print(f"找到 {len(locations)} 个匹配对象") for loc in locations: center = pyautogui.center(loc) pyautogui.click(center.x, center.y, clicks=clickTimes, interval=0.2, duration=0.2, button=lOrR) time.sleep(0.1) # 对象间操作间隔 break print("未找到匹配图片,0.1秒后重试") time.sleep(0.1) elif reTry == -1: # 无限重试 while True: locations = list(pyautogui.locateAllOnScreen(img, confidence=0.9)) if locations: print(f"找到 {len(locations)} 个匹配对象") for loc in locations: center = pyautogui.center(loc) pyautogui.click(center.x, center.y, clicks=clickTimes, interval=0.2, duration=0.2, button=lOrR) time.sleep(0.1) time.sleep(0.1) elif reTry > 1: # 指定重试次数 for attempt in range(reTry): locations = list(pyautogui.locateAllOnScreen(img, confidence=0.9)) if locations: print(f"尝试 {attempt + 1}/{reTry}: 找到 {len(locations)} 个匹配对象") for loc in locations: center = pyautogui.center(loc) pyautogui.click(center.x, center.y, clicks=clickTimes, interval=0.2, duration=0.2, button=lOrR) time.sleep(0.1) else: print(f"尝试 {attempt + 1}/{reTry}: 未找到匹配图片") time.sleep(0.1) def mainWork(img): i = 1 while i < sheet1.nrows: cmdType = sheet1.row(i)[0] # 获取多对象操作标记(新增第4列) multi_mode = False if len(sheet1.row(i)) > 3: # 确保存在第4列 # 处理数字和字符串两种格式 if sheet1.row(i)[3].ctype == 2: # 数字类型 multi_mode = bool(sheet1.row(i)[3].value) elif sheet1.row(i)[3].ctype == 1: # 字符串类型 multi_mode = str(sheet1.row(i)[3].value).lower() in [&#39;1&#39;, &#39;true&#39;, &#39;yes&#39;, &#39;多对象&#39;] if cmdType.value == 1.0: # 左键单击 img = sheet1.row(i)[1].value reTry = 1 if sheet1.row(i)[2].ctype == 2 and sheet1.row(i)[2].value != 0: reTry = sheet1.row(i)[2].value if multi_mode: mouseClickAll(clickTimes=1, lOrR=&#39;left&#39;, img=img, reTry=reTry) print(f"多对象左键单击: {img}") else: mouseClick(clickTimes=1, lOrR=&#39;left&#39;, img=img, reTry=reTry) print(f"单对象左键单击: {img}") i += 1 elif cmdType.value == 2.0: # 左键双击 img = sheet1.row(i)[1].value reTry = 1 if sheet1.row(i)[2].ctype == 2 and sheet1.row(i)[2].value != 0: reTry = sheet1.row(i)[2].value if multi_mode: mouseClickAll(clickTimes=2, lOrR=&#39;left&#39;, img=img, reTry=reTry) print(f"多对象左键双击: {img}") else: mouseClick(clickTimes=2, lOrR=&#39;left&#39;, img=img, reTry=reTry) print(f"单对象左键双击: {img}") i += 1 elif cmdType.value == 3.0: # 右键单击 img = sheet1.row(i)[1].value reTry = 1 if sheet1.row(i)[2].ctype == 2 and sheet1.row(i)[2].value != 0: reTry = sheet1.row(i)[2].value if multi_mode: mouseClickAll(clickTimes=1, lOrR=&#39;right&#39;, img=img, reTry=reTry) print(f"多对象右键单击: {img}") else: mouseClick(clickTimes=1, lOrR=&#39;right&#39;, img=img, reTry=reTry) print(f"单对象右键单击: {img}") i += 1 # 4代表输入 elif cmdType.value == 4.0: inputValue = sheet1.row(i)[1].value pyperclip.copy(inputValue) pyautogui.hotkey(&#39;ctrl&#39;, &#39;v&#39;) print("输入:", inputValue) time.sleep(0.5) # 5 代表等待 elif cmdType.value == 5.0: # 取图片名称 waitTime = sheet1.row(i)[1].value time.sleep(waitTime) print("等待", waitTime, "秒") # 6代表滚轮 elif cmdType.value == 6.0: # 取图片名称 scroll = sheet1.row(i)[1].value pyautogui.scroll(int(scroll)) print("滚轮滑动", int(scroll), "距离") # 7代表_热键组合 elif cmdType.value == 7.0: # 取重试次数,并循环。 reTry = 1 if sheet1.row(i)[2].ctype == 2 and sheet1.row(i)[2].value != 0: reTry = sheet1.row(i)[2].value inputValue = sheet1.row(i)[1].value hotkeyGroup(reTry, inputValue) time.sleep(0.5) # 8代表_粘贴当前时间 elif cmdType.value == 8.0: # 设置本机当前时间。 localtime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) pyperclip.copy(localtime) pyautogui.hotkey(&#39;ctrl&#39;, &#39;v&#39;) print("粘贴了本机时间:", localtime) time.sleep(0.5) # 9代表_系统命令集模式 elif cmdType.value == 9.0: wincmd = sheet1.row(i)[1].value os.system(wincmd) print("运行系统命令:", wincmd) time.sleep(0.5) i += 1 # 主程序 while True: if __name__ == &#39;__main__&#39;: file = &#39;D:\\BaiduNetdiskDownload\\python自动化_bilibili_V211207\\211207_改良\\cmd.xls&#39; # 打开文件 wb = xlrd.open_workbook(filename=file) # 通过索引获取表格sheet页 sheet1 = wb.sheet_by_index(0) print("欢迎使用自动操作") # 避免多次循环导致的ctrl+v导入到,按ESC进行取消。 pyautogui.hotkey(&#39;esc&#39;) # 数据检查 checkCmd = dataCheck(sheet1) # 输入选项实现功能 if checkCmd: key = input( &#39;选择功能: 1.做一次 2.循环几次 3.循环到死 0.退出程序\n特殊功能:c.清理屏幕显示\n———————————————————————————————————————\n&#39;) if key == &#39;1&#39;: # 循环拿出每一行指令1 print("正在执行第1次命令") print("") mainWork(sheet1) print("") print("已经完成第1次命令") print("——————————————————分割线——————————————————") print("") elif key == &#39;2&#39;: print("") count = 0 times = input(&#39;输入需要循环的次数,务必输入正整数。\n&#39;) times = int(times) if count < times: while count < times: count += 1 print("正在执行第", count, "次", "命令") print("") mainWork(sheet1) time.sleep(0.1) print("等待0.1秒") print("") print("已经完成第", count, "次", "命令") print("——————————————————分割线——————————————————") print("") else: print(&#39;输入有误或者已经退出!&#39;) os.system(&#39;pause&#39;) print("") print("——————————————————————————————————————————") elif key == &#39;3&#39;: count = 0 while True: count += 1 print("正在执行第", count, "次", "命令") print("") mainWork(sheet1) time.sleep(0.1) print("等待0.1秒") print("") print("已经完成第", count, "次", "命令") print("——————————————————分割线——————————————————") print("") elif key == &#39;0&#39;: print("正清理缓存文件...") os.system(&#39;@echo off & for /d %i in (%temp%\^_MEI*) do (rd /s /q "%i")>nul&#39;) exit("正在退出程序...") elif key == &#39;c&#39;: os.system(&#39;cls&#39;) else: print(&#39;输入有误或者已经退出!&#39;) os.system(&#39;pause&#39;) print("") print("——————————————————————————————————————————")为什么鼠标无法移动
08-19
success = attempt_password(password) File "C:\Users\colaj\Desktop\pan\尝试.py", line 55, in attempt_password input_box = locate_image(IMG_INPUT_BOX, confidence=0.9, timeout=10) File "C:\Users\colaj\Desktop\pan\尝试.py", line 44, in locate_image location = pyautogui.locateCenterOnScreen(image_path, confidence=confidence) File "C:\Users\colaj\AppData\Local\Programs\Python\Python310\lib\site-packages\pyautogui\__init__.py", line 172, in wrapper return wrappedFunction(*args, **kwargs) File "C:\Users\colaj\AppData\Local\Programs\Python\Python310\lib\site-packages\pyautogui\__init__.py", line 204, in locateCenterOnScreen return pyscreeze.locateCenterOnScreen(*args, **kwargs) File "C:\Users\colaj\AppData\Local\Programs\Python\Python310\lib\site-packages\pyscreeze\__init__.py", line 447, in locateCenterOnScreen coords = locateOnScreen(image, **kwargs) File "C:\Users\colaj\AppData\Local\Programs\Python\Python310\lib\site-packages\pyscreeze\__init__.py", line 405, in locateOnScreen retVal = locate(image, screenshotIm, **kwargs) File "C:\Users\colaj\AppData\Local\Programs\Python\Python310\lib\site-packages\pyscreeze\__init__.py", line 383, in locate points = tuple(locateAll(needleImage, haystackImage, **kwargs)) File "C:\Users\colaj\AppData\Local\Programs\Python\Python310\lib\site-packages\pyscreeze\__init__.py", line 231, in _locateAll_opencv needleImage = _load_cv2(needleImage, grayscale) File "C:\Users\colaj\AppData\Local\Programs\Python\Python310\lib\site-packages\pyscreeze\__init__.py", line 193, in _load_cv2 raise IOError( OSError: Failed to read input_box.png because file is missing, has improper permissions, or is an unsupported or invalid format
06-11
<think>好的,用户的问题是如何优化Pythonpyautogui的鼠标点击函数,以提高效率和准确性。首先,我需要回忆一下pyautogui的相关功能和常见优化方法。根据用户提供的引用内容,pyautogui有click()、moveTo()这些函数,可能涉及到坐标定位和操作延迟的问题。 首先,用户可能遇到的问题是点击的位置不准确,或者执行速度不够快。所以优化方向可能包括调整延迟设置、预加载坐标、使用相对移动、结合图像识别,以及多线程处理。比如,pyautogui默认有延迟,可能导致操作变慢,调整PAUSE变量可以加快速度。另外,频繁获取屏幕分辨率可能会影响效率,预加载这些数据可能有帮助。 接下来,需要确保每个优化点都有对应的代码示例,并且解释清楚原理。比如,禁用延迟可以用pyautogui.PAUSE = 0,或者用FAILSAFE=False来避免安全延迟。预加载坐标的话,可以提前获取屏幕尺寸,避免每次调用都计算。 然后,相对移动可能比绝对移动更快,尤其是在需要连续点击相近位置的时候。使用dragTo或dragRel可以减少移动时间。图像识别方面,locateOnScreen可以找到目标位置,提高准确性,但可能需要处理图像加载时间,可以预加载图像到内存。 多线程或异步处理可能适合需要同时执行其他任务的情况,但需要注意线程安全。此外,异常处理也很重要,比如在图像找不到时提供备用方案,避免脚本崩溃。 最后,要检查是否有遗漏的优化点,比如硬件加速或者结合其他库如OpenCV提高识别速度。可能需要提醒用户根据具体场景选择合适的方法,比如游戏自动化可能需要更低延迟,而日常任务可能更注重准确性。</think>### 分步优化方案 #### 1. **禁用默认延迟以提高速度** - **问题**:PyAutoGUI默认在每次操作后添加0.1秒的延迟(通过`pyautogui.PAUSE`控制),可能降低效率。 - **优化代码**: ```python import pyautogui pyautogui.PAUSE = 0 # 禁用默认延迟 pyautogui.FAILSAFE = False # 关闭安全检测(谨慎使用) ``` - **说明**:禁用延迟后,操作速度显著提升,但需注意过快可能导致程序失控[^2]。 #### 2. **预加载目标坐标** - **问题**:重复调用`pyautogui.position()`或动态计算坐标会增加时间开销。 - **优化代码**: ```python # 预加载屏幕尺寸 screen_width, screen_height = pyautogui.size() target_x = screen_width // 2 # 示例:屏幕中心坐标 target_y = screen_height // 2 # 直接使用预加载坐标 pyautogui.click(target_x, target_y) ``` - **说明**:预加载静态坐标可减少实时计算开销[^2]。 #### 3. **使用相对移动替代绝对移动** - **问题**:`moveTo()`需要计算绝对坐标,而`dragRel()`或`click(button=&#39;left&#39;, _pause=False)`支持相对位置。 - **优化代码**: ```python # 从当前位置向右移动100像素,向下移动50像素后点击 pyautogui.dragRel(100, 50, duration=0.1, button=&#39;left&#39;) ``` - **说明**:相对移动适合连续操作场景,减少坐标计算时间。 #### 4. **图像识别辅助定位** - **问题**:动态界面中目标位置可能变化,需提高定位准确性。 - **优化代码**: ```python # 预加载目标图像到内存 from PIL import Image target_image = Image.open("button.png") # 使用图像识别定位 try: location = pyautogui.locateOnScreen(target_image, confidence=0.9) pyautogui.click(location) except pyautogui.ImageNotFoundException: print("未找到目标图像") ``` - **说明**:`confidence`参数可调整匹配阈值,平衡速度与准确性[^1]。 #### 5. **多线程执行耗时操作** - **问题**:图像识别或复杂计算可能阻塞主线程。 - **优化代码**: ```python import threading def click_thread(): # 执行点击操作 pyautogui.click(100, 200) # 启动线程 threading.Thread(target=click_thread).start() ``` - **说明**:适合与其他任务并行执行,但需注意线程间同步。 --- ### 关键优化总结 | 方法 | 适用场景 | 效率提升 | 准确性提升 | |-------------------|----------------------------|----------|------------| | 禁用延迟 | 高频次简单操作 | ⭐⭐⭐⭐ | ⭐ | | 预加载坐标 | 固定位置点击 | ⭐⭐ | ⭐⭐⭐ | | 相对移动 | 连续操作(如拖拽) | ⭐⭐⭐ | ⭐⭐ | | 图像识别 | 动态界面元素定位 | ⭐ | ⭐⭐⭐⭐ | | 多线程 | 复杂任务并行 | ⭐⭐⭐⭐ | ⭐ | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值