Step 6: 使用示例
实际应用场景示例和最佳实践。
场景 1:批量导入文件
自动遍历文件夹,将每个文件导入到应用程序中。
python
from client import AIClient
from pathlib import Path
import time
# 初始化客户端
client = AIClient(server_ip='192.168.1.100')
def batch_import_files(folder_path):
"""批量导入文件"""
folder = Path(folder_path)
files = list(folder.glob('*.pdf')) # 只处理 PDF 文件
print(f"📁 找到 {len(files)} 个 PDF 文件")
for i, file in enumerate(files, 1):
print(f"\n[{i}/{len(files)}] 处理: {file.name}")
# 1. 点击"导入"按钮
if not client.find_and_click('导入按钮'):
continue
client.wait(2)
# 2. 在文件选择对话框中输入文件路径
client.type_text(str(file.absolute()))
client.wait(1)
# 3. 点击"打开"按钮
client.find_and_click('打开按钮')
client.wait(3)
# 4. 点击"确认"按钮
client.find_and_click('确认按钮')
client.wait(2)
print(f"✅ {file.name} 导入完成")
# 运行
batch_import_files('D:/documents')场景 2:自动化测试
测试应用程序的登录流程。
python
from client import AIClient
import time
client = AIClient(server_ip='192.168.1.100')
def test_login(username, password):
"""测试登录功能"""
print("\n=== 开始登录测试 ===")
# 1. 点击用户名输入框
if not client.find_and_click('用户名输入框'):
print("❌ 测试失败:找不到用户名输入框")
return False
client.wait(1)
client.type_text(username)
# 2. 点击密码输入框
if not client.find_and_click('密码输入框'):
print("❌ 测试失败:找不到密码输入框")
return False
client.wait(1)
client.type_text(password)
# 3. 点击登录按钮
if not client.find_and_click('登录按钮'):
print("❌ 测试失败:找不到登录按钮")
return False
client.wait(3)
# 4. 验证登录是否成功
response = client.ask_ai('屏幕上是否显示"登录成功"或用户名?')
if response and ('成功' in response or '用户' in response):
print("✅ 测试通过:登录成功")
return True
else:
print("❌ 测试失败:登录失败")
return False
# 运行测试
test_login('testuser', 'password123')场景 3:数据录入
从 Excel 读取数据并录入到应用程序。
python
from client import AIClient
import pandas as pd
import time
client = AIClient(server_ip='192.168.1.100')
def data_entry_from_excel(excel_path):
"""从 Excel 录入数据"""
# 读取 Excel
df = pd.read_excel(excel_path)
print(f"📊 读取到 {len(df)} 条数据")
for index, row in df.iterrows():
print(f"\n[{index + 1}/{len(df)}] 录入数据...")
# 点击"新建"按钮
client.find_and_click('新建按钮')
client.wait(2)
# 填写姓名
client.find_and_click('姓名输入框')
client.wait(1)
client.type_text(row['姓名'])
# 填写年龄
client.find_and_click('年龄输入框')
client.wait(1)
client.type_text(str(row['年龄']))
# 填写邮箱
client.find_and_click('邮箱输入框')
client.wait(1)
client.type_text(row['邮箱'])
# 点击"保存"按钮
client.find_and_click('保存按钮')
client.wait(2)
print(f"✅ {row['姓名']} 录入完成")
# 运行
data_entry_from_excel('data.xlsx')场景 4:智能任务规划
让 AI 理解复杂任务并自动执行。
python
from client import AIClient
client = AIClient(server_ip='192.168.1.100')
def execute_complex_task(task_description):
"""执行复杂任务"""
print(f"\n📋 任务: {task_description}")
# 让 AI 分解任务
prompt = f"""
任务:{task_description}
请将这个任务分解为具体步骤,每行一个步骤。
格式示例:
1. 点击"文件"菜单
2. 点击"打开"选项
3. 输入文件路径
4. 点击"确定"按钮
只返回步骤列表,不要其他解释。
"""
steps = client.ask_ai(prompt)
if steps:
print(f"\n🤖 AI 生成的步骤:\n{steps}\n")
# 询问用户是否执行
confirm = input("是否执行这些步骤?(y/n): ")
if confirm.lower() == 'y':
print("\n开始执行...")
# 这里可以进一步解析步骤并执行
# 实际应用中需要更复杂的逻辑
else:
print("已取消")
else:
print("❌ AI 无法理解任务")
# 示例
execute_complex_task("打开记事本,输入'Hello World',然后保存到桌面")场景 5:条件判断
根据屏幕内容做出不同的操作。
python
from client import AIClient
client = AIClient(server_ip='192.168.1.100')
def conditional_action():
"""根据屏幕内容执行不同操作"""
# 询问 AI 当前状态
response = client.ask_ai('屏幕上是否显示错误信息?')
if response and '是' in response:
print("⚠️ 检测到错误,执行错误处理...")
client.find_and_click('确定按钮')
client.wait(2)
client.find_and_click('重试按钮')
else:
print("✅ 正常状态,继续执行...")
client.find_and_click('下一步按钮')场景 6:循环等待
等待某个元素出现后再继续。
python
from client import AIClient
import time
client = AIClient(server_ip='192.168.1.100')
def wait_for_element(element_description, timeout=60):
"""等待元素出现"""
print(f"⏳ 等待 {element_description} 出现...")
start_time = time.time()
while time.time() - start_time < timeout:
response = client.ask_ai(f'屏幕上是否有"{element_description}"?')
if response and '是' in response:
print(f"✅ {element_description} 已出现")
return True
time.sleep(2)
print(f"❌ 超时:{element_description} 未出现")
return False
# 使用
if wait_for_element('加载完成提示', timeout=30):
client.find_and_click('继续按钮')最佳实践
1. 错误处理
python
def safe_click(client, button_description, retry=3):
"""带重试的点击"""
for i in range(retry):
try:
if client.find_and_click(button_description):
return True
print(f"重试 {i + 1}/{retry}...")
time.sleep(2)
except Exception as e:
print(f"错误: {e}")
return False2. 日志记录
python
import logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('automation.log'),
logging.StreamHandler()
]
)
logger = logging.getLogger(__name__)
def logged_action(action_name, func):
"""记录操作日志"""
logger.info(f"开始: {action_name}")
try:
result = func()
logger.info(f"成功: {action_name}")
return result
except Exception as e:
logger.error(f"失败: {action_name} - {e}")
return None3. 配置管理
python
import json
def load_config(config_file='config.json'):
"""加载配置文件"""
with open(config_file, 'r', encoding='utf-8') as f:
return json.load(f)
config = load_config()
client = AIClient(
server_ip=config['server']['ip'],
api_key=config['server']['api_key']
)4. 进度通知
python
def send_notification(title, message):
"""发送系统通知"""
try:
# Windows
from win10toast import ToastNotifier
toaster = ToastNotifier()
toaster.show_toast(title, message, duration=5)
except:
print(f"通知: {title} - {message}")
# 使用
send_notification("自动化任务", "批量处理完成!")性能优化技巧
1. 减少截图次数
python
# 不好的做法:每次都截图
for i in range(10):
client.find_and_click('按钮')
# 好的做法:先定位一次,然后重复点击
response = client.ask_ai('找到"按钮"的坐标')
x, y = parse_coordinates(response)
for i in range(10):
pyautogui.click(x, y)2. 使用区域截图
python
# 只截取需要的区域
region = (100, 100, 500, 400) # (x, y, width, height)
client.ask_ai('这个区域有什么?', region=region)3. 缓存常见结果
python
from functools import lru_cache
@lru_cache(maxsize=100)
def get_button_position(button_name):
return client.find_and_click(button_name)检查清单
完成本步骤后,你应该能够:
- [ ] 执行简单的点击操作
- [ ] 批量处理文件
- [ ] 填写表单
- [ ] 进行条件判断
- [ ] 处理错误和重试
- [ ] 记录日志
下一步
了解使用示例后,继续 Step 7: 故障排查