Python3+Appium安装及Appium模拟微信登录方法详解


Posted in Python onFebruary 16, 2021

一、Appium安装

我们知道selenium是桌面浏览器自动化操作工具(Web Browser Automation)

appium是继承selenium自动化思想旨在使手机app操作也能自动化的工具(Mobile App Automation Made Awesome)。

appium可以通过Desktop App和npm两种方式安装。Desktop App类似于selenium IDE提供一个图形界面式操作工具;npm类似于selenium就只能使用命令行。

如果对appium还不太熟悉,推荐使用Desktop App安装,这样一些操作我们可以使用Desktop App来输出代码,写代码时就有个参考。

1.1 安装Android SDK

要想操作安卓手机需要Android SDK,所以在安装appium之前先安装Android SDK。

推荐直接安装Android  Studio然后使用Android Studio安装SDK(太慢可通过图中HTTP Proxy设置代理)。

菜单----Tools----SDK Manager,钩选自己要安装的版本点击Apply进行下载即可。

Python3+Appium安装及Appium模拟微信登录方法详解

Android SDK安装完成后,新建ANDROID_HOME环境变量,值为上图Android SDK Location的目录(我这里是“D:\Language\ASDK”)

Python3+Appium安装及Appium模拟微信登录方法详解

1.2 通过Desktop App安装(推荐)

下载地址:https://github.com/appium/appium-desktop/releases

选择操作系统对应版本下载,Windows直接双击安装即可。 

Python3+Appium安装及Appium模拟微信登录方法详解

1.3 通过npm安装

1.3.1 安装nodejs

appium本质是一个nodejs库所以要先安装nodejs,然后使用npm安装。

nodejs下载地址:https://nodejs.org/zh-cn/download/

下载zip包解压到自己想放的目录,然后把该目录加入Path环境变量即可。

1.3.2 安装appium

npm install -g appium

 安装appium的过程中安装chromedriver时会连接google网站上去(报错RequestError: Error: connect ETIMEDOUT 216.58.220.208:443),所以可能你需要参考以下命令设置一下npm代理

# 设置代理
npm config set proxy http://127.0.0.1:1080
npm config set https-proxy http://127.0.0.1:1080

# 如果代理需要用户名密码
npm config set proxy http://username:password@127.0.0.1:1080
npm config set https-proxy http://username:password@127.0.0.1:1080

# 注册npm仓库
npm config set registry https://registry.npmjs.org
# 查看当前配置项npm config getnpm config get proxy
# 删除代理配置
npm config delete proxy
npm config delete https-proxy

配置本质上会存放到“C:\Users\你的用户名\.npmrc”内,所以也可以直接修改该文件。

1.3.3 使用appinum-doctor确认环境配置无误

npm install -g appium-doctor
appium-doctor --android

Python3+Appium安装及Appium模拟微信登录方法详解

 二、手机连接appium

2.1 启动appium服务

如果是通过npm安装,appium会被安装到nodejs目录下,直接使用appium命令启动即可

Python3+Appium安装及Appium模拟微信登录方法详解

我这里使用Desktop App方式安装,安装完成后双击桌面上的图标界面如下:

Python3+Appium安装及Appium模拟微信登录方法详解

我们使用默认配置都不修改,直接点击“Start Server”按钮启动 

Python3+Appium安装及Appium模拟微信登录方法详解

2.2 手机使用数据线连接电脑

使用数据线把手机连接到开启appium的电脑,开启usb调试功能。可使用adb命令列出设备确保连接成功

adb devices -l

Python3+Appium安装及Appium模拟微信登录方法详解

三、 使用示例

下边以python3+appium打开微信并登录进行演示。python操作appium是通过向appnium的监听端口发报文实现的,所以python不用安装什么appium库。

3.1 Desktop App打开微信并登录

Python3+Appium安装及Appium模拟微信登录方法详解

添加以下四项值,完后点击“Start Session”。

platformName---设备平台。填Android或IOS

deviceName----设备名。按上边adb查出的设备名填写即可

appPackage----要启动的app的包名。微信是"com.tencent.mm"

appActivity----要启动的界面。微信启动界面是".ui.LauncherUI"

{
 "platformName": "Android",
 "deviceName": "HWEVA",
 "appPackage": "com.tencent.mm",
 "appActivity": ".ui.LauncherUI"
}

Python3+Appium安装及Appium模拟微信登录方法详解

选择xml控件,对应部份就会高亮显示。

Python3+Appium安装及Appium模拟微信登录方法详解

点击开始录制,然后在该appium界面上操作(注意不是自己直接在手机上操作),操作过程就会被记录下来然后可输出该过程对应的python代码

Python3+Appium安装及Appium模拟微信登录方法详解

操作过程就会被记录下来,在Recorder下拉选择语言即可输出操作对应的代码

Python3+Appium安装及Appium模拟微信登录方法详解

3.2 全代码自动化登录实现

Desktop App已给出界面内操作的代码,全代码自动化主要的其实只是打开该界面的代码。

首先我们先安装两个依赖库

pip install Appium-Python-Client Selenium

代码补全如下,Appium-Python-Client继承自Selenium所以使用方法和selenium是很类似的,更多api操作见:https://github.com/appium/python-client

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

# appium服务监听地址
server='http://localhost:4723/wd/hub'
# app启动参数
desired_caps={
 "platformName": "Android",
 "deviceName": "HWEVA",
 "appPackage": "com.tencent.mm",
 "appActivity": ".ui.LauncherUI"
}

# 驱动
driver = webdriver.Remote(server,desired_caps)
wait = WebDriverWait(driver,30)
# 获取登录按钮
login_btn = wait.until(EC.presence_of_element_located((By.ID,"com.tencent.mm:id/drp")))
# 点击登录按钮
login_btn.click()
# 获取手机号文本框
phone_text = wait.until(EC.presence_of_element_located((By.ID,"com.tencent.mm:id/ji")))
# 填写手机号文本框
phone_text.send_keys("18888888888")

更多关于Appium的使用方法请查看下面的相关链接

Python 相关文章推荐
调试Python程序代码的几种方法总结
Apr 28 Python
不要用强制方法杀掉python线程
Feb 26 Python
python中requests库session对象的妙用详解
Oct 30 Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
Jan 08 Python
基于python实现名片管理系统
Nov 30 Python
python实现对服务器脚本敏感信息的加密解密功能
Aug 13 Python
python使用gdal对shp读取,新建和更新的实例
Mar 10 Python
python使用openpyxl操作excel的方法步骤
May 28 Python
在keras里实现自定义上采样层
Jun 28 Python
python统计mysql数据量变化并调用接口告警的示例代码
Sep 21 Python
python可视化之颜色映射详解
Sep 15 Python
python+opencv实现目标跟踪过程
Jun 21 Python
Python3使用Selenium获取session和token方法详解
Feb 16 #Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
Feb 16 #Python
PyCharm+Miniconda3安装配置教程详解
Feb 16 #Python
Python3+Django get/post请求实现教程详解
Feb 16 #Python
Python3+Flask安装使用教程详解
Feb 16 #Python
Python基于爬虫实现全网搜索并下载音乐
Feb 14 #Python
Python LMDB库的使用示例
Feb 14 #Python
You might like
PHP语言中global和$GLOBALS[]的分析 之二
2012/02/02 PHP
PHP采集静态页面并把页面css,img,js保存的方法
2014/12/23 PHP
PHP实现批量检测网站是否能够正常打开的方法
2016/08/23 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
2017/04/04 PHP
Laravel第三方包报class not found的解决方法
2019/10/13 PHP
js 判断一个元素是否在页面中存在
2012/12/27 Javascript
JS实现的3D拖拽翻页效果代码
2015/10/31 Javascript
学习JavaScript设计模式(多态)
2015/11/25 Javascript
jQuery+ajax实现滚动到页面底部自动加载图文列表效果(类似图片懒加载)
2016/06/07 Javascript
原生态js,鼠标按下后,经过了那些单元格的简单实例
2016/08/11 Javascript
通过jquery的ajax请求本地的json文件方法
2018/08/08 jQuery
vue 动态绑定背景图片的方法
2018/08/10 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
vue props对象validator自定义函数实例
2019/11/13 Javascript
vue插槽slot的简单理解与用法实例分析
2020/03/14 Javascript
编写一个javascript元循环求值器的方法
2020/04/14 Javascript
python实现巡检系统(solaris)示例
2014/04/02 Python
Python实现基于权重的随机数2种方法
2015/04/28 Python
python的Crypto模块实现AES加密实例代码
2018/01/22 Python
Python高级用法总结
2018/05/26 Python
在python中只选取列表中某一纵列的方法
2018/11/28 Python
django框架自定义模板标签(template tag)操作示例
2019/06/24 Python
Python多重继承之菱形继承的实例详解
2020/02/12 Python
Python ConfigParser模块的使用示例
2020/10/12 Python
matplotlib自定义鼠标光标坐标格式的实现
2021/01/08 Python
彪马加拿大官网:PUMA加拿大
2018/10/04 全球购物
沙特阿拉伯家用电器和电子产品购物网站:Sheta and Saif
2020/04/03 全球购物
聚网科技C++面试笔试题
2015/09/01 面试题
表扬信格式
2014/01/12 职场文书
小班开学寄语
2014/04/04 职场文书
《赠汪伦》教学反思
2014/04/12 职场文书
经营理念标语
2014/06/21 职场文书
2014年青年教师工作总结
2014/12/17 职场文书
Matlab求解数组中的最大值及它所在的具体位置
2021/04/16 Python
vue实现可拖拽的dialog弹框
2021/05/13 Vue.js
解决vue-router的beforeRouteUpdate不能触发
2022/04/14 Vue.js