
在与你聊天的可能根本就不是人中介绍了下appium的安装和使用。最近打算买手机,而国家补贴时间属实有点短。于是就想着写个脚本试试吧。
雷电模拟器
个人比较喜欢的一款模拟器,还有很多,比如MuMu等等吧。目前感觉雷电是连接是最省事的模拟器了。还有它的多开功能也很方便,只要电脑配置足够,可以同时打开很多个模拟器。更多的参见官网吧。
双开抢国补
本人代开两个模拟器,打开l连个appium server
appium server -p 4723
appium server -p 4724
接下是完整的代码,
import json
import unittest
from datetime import time, datetime
from time import sleep
from concurrent.futures import ThreadPoolExecutor, as_completed
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBy
capabilities = dict(
platformName='Android',
automationName='uiautomator2',
deviceName='Android',
# udid="emulator-5556"
)
bind_cap = {"emulator-5554":'http://localhost:4724', "emulator-5556":'http://localhost:4725'}
def run_test_for_device(udid, server_url, activate=False):
"""为单个设备执行测试动作"""
# 复制基础配置,添加当前设备的 udid
device_cap = capabilities.copy()
device_cap['udid'] = udid # 动态添加 udid
appium_server_url = server_url
driver = None
try:
# 初始化driver
driver = webdriver.Remote(appium_server_url, options=UiAutomator2Options().load_capabilities(device_cap))
# 执行点击操作
# 点击固定坐标(1796, 593)
if activate:
driver.tap([(1193, 77)])
# 刷新当前页面
# driver.refresh()
else:
# driver.tap([(194, 1042)])
# sleep(2)
butie = driver.find_element(by=AppiumBy.XPATH, value='//android.view.View[@text="智能手表手环"]')
butie.click()
# sleep(2)
# driver.tap([(1796, 593)])
# 等待1秒
sleep(1)
# 查找并点击"同意"按钮
# 假设"同意"按钮在一个黄色框内,尝试通过文本查找
agree_button = driver.find_element(by=AppiumBy.XPATH, value='//android.view.View[@text="同意"]')
agree_button.click()
print(f"设备 {udid} 测试动作执行完成")
return f"设备 {udid} 执行成功"
except Exception as e:
print(f"设备 {udid} 执行过程中出现错误: {e}")
return f"设备 {udid} 执行失败: {e}"
finally:
# 清理资源
if driver:
driver.quit()
def run_test_action(activate=False):
"""并发执行测试动作的核心函数"""
print("开始并发执行测试...")
# 使用线程池并发执行
with ThreadPoolExecutor(max_workers=len(bind_cap)) as executor:
# 提交所有设备的测试任务
future_to_device = {
executor.submit(run_test_for_device, udid, server_url, activate): udid
for udid, server_url in bind_cap.items()
}
# 等待所有任务完成并收集结果
results = []
for future in as_completed(future_to_device):
udid = future_to_device[future]
try:
result = future.result()
results.append(result)
print(f"设备 {udid} 任务完成: {result}")
except Exception as e:
error_msg = f"设备 {udid} 任务执行异常: {e}"
results.append(error_msg)
print(error_msg)
print("所有设备测试执行完成")
return results
def main():
"""主函数"""
print("程序开始运行...")
while True:
# 获取当前时间
now = datetime.now()
# 如果当前时间是早上8点59分到9点5分之间,则执行测试
if (now.hour == 9 and now.minute >= 0 and now.minute <= 5):
print(f"当前时间是 {now.strftime('%H:%M')},开始执行测试...")
run_test_action()
# 等待一段时间避免过于频繁执行
sleep(1) # 等待2秒
else:
print(now.hour, now.minute)
print(f"当前时间是 {now.strftime('%H:%M')},不在指定时间范围(9:00-9:05),等待下一次检查...")
# if (now.hour == 8 and now.minute == 59):
# print("8:59")
# sleep(1)
# else:
run_test_action(False)
sleep(5) # 等待1分钟再检查
if __name__ == '__main__':
main()

如果需要添加更多设置,多开几个server和模拟器即可,修改上面的bind_cap = {“emulator-5554”:‘http://localhost:4724’, “emulator-5556”:‘http://localhost:4725’}即可。
写在最后
尽管使用这奇技淫巧,依然还是没有抢到。不会是内定的吧。每天试试吧,也不知道哪一次就成功了呀。
更多内容,欢迎关注我的微信公众号: 半夏之夜的无情剑客。
581

被折叠的 条评论
为什么被折叠?



