Python 自动化测试/脚本
一、鼠标操作
#安装pip install -i https://mirrors.aliyun.com/pypi/simple/ pyautogui
1.鼠标的操作
import pyautogui as pa#鼠标移动 x y
# pa.moveTo(100,100)# 鼠标移动时间
#duration=1 运行到指定位置的时间为1秒
# pa.moveTo( 0,0,duration=1)#鼠标偏移 超过屏幕大小就会报错
#坐标值:最小写 0最大写 分辨率-1
# pa.moveTo(0, 0,0.5 )# 鼠标偏移和移动时间
#当前鼠标位置偏移后不能超过屏幕分辨率
#当前鼠标位置不能是0-0
pa.move(100,100,0.5)
2.获取屏幕分辨率和鼠标位置
import pyautogui as pa#获取屏幕分辨率
x,y = pa.size()
print(x,y) #1920 1080#获取鼠标位置
x,y= pa.position()
print(x,y) #1406 599
3.实时获取鼠标当前位置
import pyautogui as pa# 获取鼠标初始位置
x,y= pa.position()while True:# 接收鼠标变动位曾x1,y1 = pa.position()# 如果初始位置和变动位置不一样if x1 != x or y1 != y:#变动位置赋值给初始位置x,y=x1,y1# 输出最新位置坐标print(x,y)
4.鼠标点击
import pyautogui as pa
import time#锁定目标位置
pa.moveTo(1863,235,1)#预防点击太快无法打开
time.sleep(1)#鼠标点击(默认左键单击)
#pa.click(1863,265,2) #传入目标位置,点击两次,在多次操作中不适合这种方法
pa.click()
pa.click()
5.点击鼠标右键、中键
# 点击间隔时间
# 点击鼠标右键、中键
# 鼠标移动时间import pyautogui as pa
# 鼠标点击(默认左键单击)
# 位置1 x=坐标值
# 位置2 y=坐标值
#位置3 clicks=点击次数
# 位置4 interval=点击间隔时间
# 位置5 button="right"右键 button="middle"中键
# 位置6 duration=1 移动时间
pa.click(1863,265,2,1,button="right",duration=1)
6.鼠标按住、抬起
# 鼠标按住、抬起
import pyautogui as pa
import timepa.moveTo(1863,265,1)# 鼠标按住 可以传递xy坐标
# 也可以传入左键右键中键
pa.mouseDown()
time.sleep(3)# 鼠标抬起
pa.mouseUp()
案例:自动刷短视频
import pyautogui as pa
import timetry:# 初始定位和点击pa.moveTo(1859, 540, duration=0.5) # 添加平滑移动time.sleep(1)pa.click()pa.click()time.sleep(2) # 等待目标元素加载# 循环执行拖拽操作for x in range(5):# 移动到起始位置pa.moveTo(659, 721, duration=0.5)# 按下鼠标(不指定坐标,使用当前位置)pa.mouseDown()time.sleep(0.5)# 向上拖拽(相对移动)pa.moveRel(0, -500, duration=1.0) # 使用moveRel更清晰表示相对移动# 释放鼠标pa.mouseUp()time.sleep(2)# 最后的点击操作pa.click()pa.click()except pa.FailSafeException:print("程序被中断:鼠标移动到了屏幕左上角")
except Exception as e:print(f"发生错误: {e}")
7.标滑轮滚动
#鼠标滑轮滚动
import pyautogui as pa
import timepa.click(239,195)
time.sleep(1)# 鼠标滑轮滚动#传入整数,正数往上滑动,负数往下滑动
#1000值,大概滑动8次
# pa.scroll(-1000)
pa.scrol1(-200)
time.sleep(2)
pa.scroll(-200)
time.sleep(2)
pa.scrol1(200)
滚动值与滚动次数的关系
在 PyAutoGUI 中,scroll()
函数的参数表示滚动的 "步长",而不是滚动的 "次数"。具体来说:
- 正值表示向上滚动
- 负值表示向下滚动
- 数值的大小表示滚动的 "力度" 或 "距离",但具体对应多少 "次滚动" 取决于操作系统和应用程序的设置
如何精确控制滚动次数
如果你需要精确控制滚动的 "次数",更好的方法是使用循环:
import pyautogui as pa
import time# 向下滚动10次,每次步长为100
for _ in range(10):pa.scroll(-100)time.sleep(0.1) # 每次滚动之间的间隔,可根据需要调整
这种方式可以确保无论在什么环境下,滚动操作都会执行指定的次数。
调试滚动行为
如果你需要调试滚动行为,可以添加一些日志输出:
import pyautogui as pa
import timedef scroll_and_log(amount, repeats=1):"""执行滚动并记录每次滚动"""for i in range(repeats):print(f"执行第 {i+1}/{repeats} 次滚动,步长: {amount}")pa.scroll(amount)time.sleep(0.5) # 给滚动操作一些时间# 示例:向上滚动5次,每次步长200
scroll_and_log(200, 5)
案例:快手上下翻页
import pyautogui as pa
import timedef perform_action(x, y, scroll_steps=None, click_count=1, delay=1):"""执行鼠标点击和滚动操作序列Args:x, y: 点击坐标scroll_steps: 滚动步骤列表,格式为 [(amount, delay), ...]click_count: 点击次数delay: 操作间基础延迟(秒)"""try:# 设置安全特性pa.FAILSAFE = True# 移动并点击print(f"移动到坐标 ({x}, {y})")pa.moveTo(x, y, duration=0.5)print(f"执行 {click_count} 次点击")for _ in range(click_count):pa.click()time.sleep(0.2)time.sleep(delay)# 执行滚动序列if scroll_steps:print("执行滚动序列:")for amount, wait in scroll_steps:print(f" 滚动: {amount} 单位,等待: {wait} 秒")pa.scroll(amount)time.sleep(wait)print("操作完成")except pa.FailSafeException:print("操作已取消:鼠标移动到屏幕角落")except Exception as e:print(f"发生错误: {e}")# 执行主操作
if __name__ == "__main__":perform_action(x=293, y=629,scroll_steps=[(-200, 2), # 向下滚动200单位,等待2秒(-200, 2), # 再次向下滚动200单位,等待2秒(200, 1) # 向上滚动200单位,等待1秒],click_count=1,delay=1)
二、键盘操作
1.键盘输入字符串
import pyautogui as pa
import time# 移动到指定位置并点击
pa.click(x=259, y=222) # 使用英文逗号和等号
time.sleep(1) # 等待1秒# 键盘输入字符串
#不支持中文,切换中文输入法,按照拼音顺序执行 拼音+空格 或拼音+数字如a2
#数字英文直接可以输入
#中文可通过复制粘贴写入# pa.write('123456abcde')#间隔时间
pa.write('123456abcde',2)
案例:短视频评论
import pyautogui as pa
import time# 移动到评论位置并点击
pa.moveTo(581,705) # 使用英文逗号和等号pa.click()
time.sleep(2)#”说点什么“位置
pa.moveTo(49,932)
pa.click()
time.sleep(2)#文字输入框位置
pa.moveTo(67,847)
pa.write("666",0.2)
time.sleep(1)#发送位置
pa.click(574,897)
2.键盘输入,输入内容,输入次数,输入间隔
import pyautogui as pa
import time# 移动到指定位置并点击
pa.click(x=259, y=222) # 使用英文逗号和等号
time.sleep(1) # 等待1秒#间隔时间
pa.write('enter',0.2)#按键输入,输入内容,输入次数,输入间隔
pa.press('enter',2,1)
time.sleep(1)
pa.press('f5') #打印时间
3.组合按键
import pyautogui as pa
import timepa.click(332,213)#组合按键
#粘贴 将复制的内容粘贴出来
pa.hotkey("ctrl", "v")#换行或发送
pa.press("enter")
time.sleep(1)#保存
pa.hotkey("ctrl", "s")
4.pyperclip更便捷的输出中文
# 更便捷的输出中文
#导包:import pyperclip 有简单的复制功能from random import randint
import pyautogui as pa
import pyperclip
import timepa.click(332,213)
time.sleep(1)# a1 = "快手脚本"#随机发送不同评论
# 设置要输出的中文内容
a1 = ["快手脚本","douyin脚本","huya脚本","xiaohongshu脚本"]# 定义一个随机数,用于取下标
a2 = randint(0,3)# 复制一个字符串
pyperclip.copy(a1[a2])
pa.hotkey("ctrl", "v")# 换行
pa.press("enter")
4.按键按住、抬起
#按键按住、抬起
import pyautogui as pa
import timepa.keyDown('shift')
pa.press('s')
pa.keyUp('shilft')
pa.press('s')
5.截取屏幕图像
#截取屏幕图像
# #安装依赖三方库:Pillow pip install pillow -i https://pypi.org/simple/import pyautogui as pa#截取屏幕图像
#第一个参数传 保存位置 默认全屏
#第二个参数 区域范围(起始,终止)
pa.screenshot("2.jpg",(1,1,100,100))
6.消息框、输入框
# 消息框、输入框
import pyautogui as pa
import time#消息框 可以起一个阻塞的作用,不点击则不运行后续内容
#第一个 消息框内容
#第二个 消息框标题
#第三个 修改确定按钮
# print("6666")
pa.alert('快手脚本',"标题","OKOK")
# print("6666")#输入框 也有暂停效果
#第一个 输入框内容
#第二个 输入框标题
#第三个位置传,默认输入值
pa.prompt("显示内容","标题","脚本")
案例:根据输入信息,创建文件
import pyautogui as pa
import time
import pyperclip # 需要安装: pip install pyperclippa.click(724,199,button="right")
time.sleep(2)pa.click(879,212)
time.sleep(1)pa.click(1073,322)
time.sleep(1)# 获取用户输入
text_to_input = pa.prompt("请输入内容", "标题")
if not text_to_input:exit()# 复制内容到剪贴板
pyperclip.copy(text_to_input)# 定位到目标输入框
pa.click(1000, 546)
time.sleep(1)# 使用快捷键粘贴(Ctrl+V)
pa.hotkey('ctrl', 'v')
time.sleep(1)pa.press('enter')