当前位置: 首页 > news >正文

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')

相关文章:

  • 使用 vscode 开发 uni-app 项目时如何解决 manifest.json 文件注释报错的问题
  • Java-46 深入浅出 Tomcat 核心架构 Catalina 容器全解析 启动流程 线程机制
  • Linux集市采购指南[特殊字符]:yum和apt的“抢货”大战!
  • 【Linux教程】Linux 生存指南:掌握常用命令,避开致命误操作
  • 如何安全高效地维护CMS智能插件?
  • 计算机网络-自顶向下—第三章运输层重点复习笔记
  • 系统架构设计师 2
  • 【DVWA系列】——JavaScript——Medium详细教程
  • 人工智能学习22-Pandas
  • el-table跨页多选和序号连续
  • nodejs和npm升级
  • Lambda 表达式的语法与使用:更简洁、更灵活的函数式编程!
  • awesome-llm-apps 项目带你探索语言模型的无限可能
  • tshark命令行语法详解
  • 华为云Flexus+DeepSeek征文 | 模型即服务(MaaS)安全攻防:企业级数据隔离方案
  • ARDM:一款国产跨平台的Redis管理工具
  • frida-android-mod-menu 使用教程
  • 怎么理解自动驾驶技术中的agent
  • Python 爬虫入门 Day 3 - 实现爬虫多页抓取与翻页逻辑
  • visual studio学习250614(编译错误)
  • 做网页局域网站点配置/哪些网站可以seo
  • 海拉尔做网站/seo人员的职责
  • 收录网站制作/北京百度推广投诉电话
  • web程序设计 asp.net实用网站开发/社群营销策略有哪些
  • php和python做网站/百度文库个人登录入口
  • 网页设计与制作实训报告心得体会2000字/旧版优化大师