背景: 有些app, 无法通过抓包实现数据采集, 也根本抓不到包, 所以就只能拿出终极秘密武器Appium了
Appium:
一个开源的手机端自动测试框架, 比selenium更强大, 支持 Android、iOS、windows 系统的原生 APP 进行自动操作, 支持不同的语言写脚本,比如我们的 Python,还有Java、JavaScript 等
环境:
Python3
Appium 1.14.2
夜神模拟器
Mac 10.14.3
本次只涉及简单的环境安装 和 使用appium包来进行模拟登录, 详细的环境安装等会另写一篇文章 安装Appium桌面版
https://github.com/appium/appium-desktop/releases
选择mac的dmg包下载, 安装即可
安装python appium模块
1 pip install Appium-Python-Client
开始:
本次使用夜神模拟器, 作为试验机 连接虚拟机或者真机最少需要以下几个值
1 2 3 4 5 6 7 desired_caps = { "platformName": "Android", "platformVersion": "4.4.2", "deviceName": "127.0.0.1:62001", "appPackage": "com.tencent.mobileqq", "appActivity": ".activity.InstallActivity" }
详细参数介绍, 请移步:
http://appium.io/docs/cn/writing-running-appium/caps/
主要参数获取方法:
1. platformVersion 手机操作系统的版本
输入以下命令获取: adb shell getprop ro.build.version.release
2. deviceName 使用的手机或模拟器类型
(1). 使用真机: adb devices, 例如: 88CKBM622PAM
(2). 使用模拟器:首先要连接上模拟器
部分模拟器连接地址如下:
1.adb连接单个模拟器
夜神模拟器
# adb connect 127.0.0.1:62001
网易MUMU模拟器
# adb connect 127.0.0.1:7555
逍遥安卓模拟器
# adb connect 127.0.0.1:21503
天天模拟器
# adb connect 127.0.0.1:6555
海马玩模拟器
# adb connect 127.0.0.1:53001
2.断开模拟器
# adb disconnect 127.0.0.1:62001
然后在使用adb devices, 例如:127.0.0.1:62001
3. appPackage 运行的 Android 应用的包名
appActivity 用于等待启动的 Android Activity 名称
模拟器打开要运行的软件 如qq
使用adb shell进入虚拟机
输入: dumpsys activity | grep mFocusedActivity
如图
启动appium, 点击start server
运行代码以下代码, 会看到如下输出:
则证明连接成功
接下来就容易了 , 使用appium找到那些要进行点击, 还有要输入的账号密码元素并控制他们
一. 配置appium连接虚拟机, 并获取虚拟机页面
以下代码的那些元素名称都是按照此方法来进行查看, 没有id就是用class, 都没有就用text
需要注意的是, 登录用户名使用send_text 密码使用send_keys
完整代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 from appium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC class QQLogin(object): def __init__(self, user_name, password): self.user_name = user_name self.password = password self.__init_args() def __init_args(self): desired_caps = { "platformName": "Android", "platformVersion": "4.4.2", "deviceName": "127.0.0.1:62001", "appPackage": "com.tencent.mobileqq", "appActivity": ".activity.InstallActivity" } self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) self.wait = WebDriverWait(self.driver, 30) def login(self): agree = self.wait.until(EC.presence_of_element_located((By.ID, "com.tencent.mobileqq:id/dialogRightBtn"))) agree.click() login = self.wait.until(EC.presence_of_element_located((By.ID, "com.tencent.mobileqq:id/btn_login"))) login.click() qqz = self.wait.until(EC.presence_of_element_located((By.ID, "请输入QQ号码或手机或邮箱"))) qqz.set_text(self.user_name) qqm = self.wait.until(EC.presence_of_element_located((By.ID, "com.tencent.mobileqq:id/password"))) qqm.send_keys(self.password) sub = self.wait.until(EC.presence_of_element_located((By.ID, "com.tencent.mobileqq:id/login"))) sub.click() print("%s login successs" % self.user_name) # self.driver.quit() if __name__ == "__main__": qq = QQLogin("QQ账号", "QQ密码") qq.login()
这次只实现登录qq, 如有任何疑问, 请留言