一、环境准备
1、jdk1.8.0
2、android-sdk_r24.4.1-windows.zip
3、Python3.6
4、Appium-Server-GUI-windows-1.22.0.zip
5、Appium-Python-Client
6、Appium-Inspector-windows-2021.12.2.zip
简单说明:jdk为java运行环境,SDK为Android运行环境,Python3.6+Appium-Python-Client库为Appium客户端,Appium-Server为Appium服务器,Appium-Inspector用于定位页面元素。
二、Appium框架原理、加载过程
Appium基本原理为
三、实战
1、在appium安装目录双击Appium Server GUI.exe先启动服务器,点击编辑配置,填入SDK和jdk根目录,保存后启动服务器。
Appium Server启动成功
2、执行代码,启动微信APP
执行代码前需要安装Appium-Python-Client库,用于连接Appium服务器。
platformName是设备系统类型,deviceName为设备名称,appPackage为应用包名,appActivity为应用启动入口,noReset为不在会话前重置应用状态,默认为false 切记要保证为True,不然APP数据会被清掉,所有聊天记录都清空,血的教训。。。
deviceName、appPackage、appActivity这三个东西可以在如下连接方法找到https://blog.csdn.net/l15767016983/article/details/122943734
如果deviceName想为IP:port,则需要在如下连接方法找到deviceName
https://blog.csdn.net/l15767016983/article/details/122939195
from appium import webdriver
if __name__ == '__main__':
desired_caps = {
"platformName": "Android",
"deviceName": "81c94a60",
"appPackage": "com.tencent.mm",
"appActivity": "com.tencent.mm.ui.LauncherUI",
"noReset": True
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
运行代码前需要确保Appium服务器正常运行,不然会连接不了服务器。
3、Inspector定位元素
安装完Inspector后在安装目录双击Appium Inspector.exe运行Inspector,填写请求JSON
启动会话,微信被成功启动。
Inspector有几个小工具,包括选择元素、录制代码、滑动坐标、点击坐标点、刷新等工具用于操作页面。
可以找到元素的ID、CLASS_NAME、XPATH等信息,用于操作元素。
(1)点击元素,进入和某人的聊天页面。
name="对方正在输入..."
count=1
while True:#循环等待消息
print("第{0}次循环。。。".format(count))
child = driver.find_elements(AppiumBy.ID, "com.tencent.mm:id/btg")
for i in child:
try:
msg_person=i.find_element(AppiumBy.ID, "com.tencent.mm:id/hga").text#联系人昵称
if name in msg_person:
msg_count=i.find_element(AppiumBy.ID, "com.tencent.mm:id/kn6").text#新消息数
if int(msg_count)>0:#和某人的消息数大于0则进入该聊天
i.click()
driver.find_element(AppiumBy.ID, "com.tencent.mm:id/fz").click()#返回上一步
except Exception:
pass
count+=1
time.sleep(5)
(2)点击输入框,输入聊天内容,发送内容。如果想自动回复各种消息可以弄一个聊天机器人,例如图灵,可以免费注册。
b4a=driver.find_element(AppiumBy.ID,"com.tencent.mm:id/b4a")#输入框
b4a.click()#需要点击一下唤起键盘,不然全面屏可能找不到发送的元素
b4a.send_keys(msg)
driver.find_element(AppiumBy.ID,"com.tencent.mm:id/b8k").click()#点击发送
(3)查看当前页面的聊天记录。
时间ID为com.tencent.mm:id/b8z,文字/小表情的ID为com.tencent.mm:id/b4b,大表情包ID为com.tencent.mm:id/b4c,发送者昵称ID为com.tencent.mm:id/b3s。
child=driver.find_element(AppiumBy.ID, "com.tencent.mm:id/b79").find_elements(AppiumBy.XPATH, ".//*")
for i in child:
resource_Id=i.get_attribute("resourceId")
if resource_Id:
text=i.get_attribute("text")
if "com.tencent.mm:id/b8z" in resource_Id:
msg_time = text# 1 时间
print(msg_time)
elif "com.tencent.mm:id/b3s" in resource_Id:
sender = i.get_attribute("contentDescription")# 2 发送者
print(sender)
elif "com.tencent.mm:id/b4b" in resource_Id:
text_msg= text# 3 文字消息/小表情
print(text_msg)
elif "com.tencent.mm:id/b4c" in resource_Id:
big_msg = "[表情]"# 4 大表情
print(big_msg)
(4)滑动页面,加载更多聊天记录。
size = driver.get_window_size()
driver.swipe(size['width'] * 0.5, size['height'] * 0.25, size['width'] * 0.5, size['height'] * 0.65)
(5)打印整页XML资源
print(driver.page_source)#打印整页XML资源