一、Appium工作原理(详情见:https://www.cnblogs.com/sophia194910/p/7515165.html

Appium的功能其实很简单:监听一个端口,然后接收由client发送来的command,翻译这些command,把这些command转成移动设备可以理解的形式发送给移动设备,然后移动设备执行完这些command后把执行结果返回给appium server,appium server再把执行结果返回给client。

在这里client其实就是发起command的设备,一般来说就是我们代码执行的机器,执行appium测试代码的机器。狭义点理解,可以把client理解成是代码,这些代码可以是java/ruby/python/js的,只要它实现了webdriver标准协议就可以。

二、Appium环境搭建

1、需要用到的软件包如下:

(1)node.js

(2)Java SDK

(3)Android SDK

(4)Appium Windows

(5)夜神模拟器

(6)Python

(7)Appium-python-Client

2、node.js(参考:https://blog.csdn.net/u010654583/article/details/85125377

(1)下载地址:http://nodejs.cn/download/

(2)安装好后,执行npm install -g appium-doctor(npm是node.js的包管理工具,下载appium-doctor可以检测Appium的环境搭建是否成功)

(3)执行appium-doctor检测Appium的环境搭建情况

上图打对勾的地方即是要坚持的环境变量配置情况,只有全部打对勾,才说明环境搭配成功

3、Java SDK

(1)下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html

(2)安装Java SDK文件,并配置环境变量,最后检测是否安装成功(参考:https://jingyan.baidu.com/article/d45ad148ba5ab169552b80d3.html

4、Android SDK

(1)下载地址:https://developer.android.com/studio/(现在已经没有单独的解压包了,只有跟Android Studio一起下载)

(2)安装好后,配置环境变量,最后检测是否安装成功(参考:https://www.cnblogs.com/nebie/p/9145627.html

5、Appium Windows

(1)下载地址:http://appium.io/

(2)安装Appium Windows

6、夜神模拟器

(1)下载地址:https://www.yeshen.com/

(2)安装

7、Python与Appium-Python-Client的安装就不讲了

8、使用appium-doctor检测环境是否安装成功,同第2步

9、测试是否能正常启动

根据appium的工作原理:

(1)测试client与appium是否能通信成功

当运行代码时,Appium就会响应,虽然是404,但只是因为Appium没有找到执行命令的设备

(2)测试appium与模拟器是否能通信成功

不管遇见什么样的错误,只要把Origin error:后面的报错信息复制到百度上找寻解决办法基本都能找到,这里表示不能找到连接了的安卓设备,所以我们先要连接安装设备,

在命令行中:

检测是否有连接的设备,下面表示没有连接的设备

连接已经打开的安卓设备,连接成功

再检测一下,发现有了

接下来就可以点击Start session,将Appium连接上安卓设备,连接成功与设备同步

现在我们使用代码驱动Appium,Appium再将命令转给安卓设备,模拟器打开,说明成功了,可以正式开始抓取APP的数据了

现在可以解释一下platformName、platformVersion、deviceName、appPackage、appActivity、noReset这几个参数的来历了

platformName(系统名称):Android、IOS、Windows、Linux

plaformVersion(系统版本)

deviceName(设备名称,即设备运行的地址,默认为127.0.0.1:62001)

appPackage(要打开哪个软件)、appActivity(要打开的软件的活动页面)

appPackage、appActivity两个参数可以通过点开模拟器上想要打开的软件,然后通过命令行获取

10、用法基本与selenium类似,下附简单的代码(定位时,能使用id,尽量不使用xpath)

#!/usr/bin/env python
# coding: utf-8 # In[63]: from appium import webdriver # In[64]: from time import sleep # In[65]: from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait # In[66]: from selenium.webdriver.common.by import By # In[67]: desired_caps = {
"platformName": "Android",
"platformVersion": "5.1.1",
"deviceName": "127.0.0.1:62001",
"appPackage": "com.wuba",
"appActivity": ".activity.launch.LaunchActivity",
"noReset": "False" # 清除缓存
} # In[68]: driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) # In[69]: # 获取手机屏幕长宽
screenWidth = driver.get_window_size()["width"]
screenHeight = driver.get_window_size()["height"] # In[70]: # beijing_xpath = "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.support.v4.view.ViewPager/android.widget.RelativeLayout/android.support.v7.widget.RecyclerView/android.widget.LinearLayout/android.widget.LinearLayout[2]/android.view.View/android.widget.LinearLayout[1]"
# WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, beijing_xpath))).click() # In[72]: hotCityId = "com.wuba:id/fl_hot"
hotCity = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "com.wuba:id/fl_hot"))) # In[73]: hotCity.find_element_by_xpath("//android.widget.LinearLayout[1]").click() # In[74]: # driver.find_element_by_id("com.wuba:id/launch_op_bt_ok").click()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "com.wuba:id/launch_op_bt_ok"))).click() # In[75]: ershoufang_xpath = "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.View/android.view.View/android.widget.LinearLayout/android.widget.LinearLayout[1]/android.widget.GridView/android.view.View[4]/android.widget.ImageView" WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, ershoufang_xpath))).click() # In[76]: ershoufang_xpath = "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.View/android.support.v4.view.ViewPager/android.widget.FrameLayout/android.widget.RelativeLayout[1]/android.widget.FrameLayout/android.widget.RelativeLayout/android.support.v7.widget.RecyclerView/android.widget.LinearLayout[1]/android.widget.LinearLayout/android.widget.LinearLayout/android.view.View[1]/android.widget.LinearLayout[1]/android.widget.TextView" WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, ershoufang_xpath))).click() # In[78]: items_id = "com.wuba:id/recyclerView"
items = driver.find_element_by_id(items_id) while 1:
driver.swipe(screenWidth*0.5, screenHeight*0.85, screenWidth*0.5, screenHeight*0.25, 500)
ls = items.find_elements_by_xpath("//android.widget.LinearLayout")
sleep(3) # In[ ]:

python爬虫之Appium手机APP爬虫的更多相关文章

  1. Python爬虫入门教程 41-100 Fiddler+夜神模拟器+雷电模拟器配置手机APP爬虫部分

    爬前叨叨 从40篇博客开始,我将逐步讲解一下手机APP的爬虫,关于这部分,我们尽量简化博客内容,在这部分中可能涉及到一些逆向,破解的内容,这部分尽量跳过,毕竟它涉及的东西有点复杂,并且偏离了爬虫体系太 ...

  2. Python爬虫入门教程 43-100 百思不得姐APP数据-手机APP爬虫部分

    1. Python爬虫入门教程 爬取背景 2019年1月10日深夜,打开了百思不得姐APP,想了一下是否可以爬呢?不自觉的安装到了夜神模拟器里面.这个APP还是比较有名和有意思的. 下面是百思不得姐的 ...

  3. Python爬虫入门教程 42-100 爬取儿歌多多APP数据-手机APP爬虫部分

    1. 儿歌多多APP简单分析 今天是手机APP数据爬取的第一篇案例博客,我找到了一个儿歌多多APP,没有加固,没有加壳,没有加密参数,对新手来说,比较友好,咱就拿它练练手,熟悉一下Fiddler和夜神 ...

  4. Python爬虫入门教程 44-100 Charles的安装与使用-手机APP爬虫部分

    1. 第二款抓包工具Charles安装与使用 Charles和Fiddler一样,也是一款抓包工具,比Fiddler界面更加清晰,支持多平台 1.1 官方网址 https://www.charlesp ...

  5. Python爬虫入门教程 49-100 Appium安装+操作51JOB_APP(模拟手机操作之一)手机APP爬虫

    爬前准备工作 在开始安装Appium之前,你要先知道Appium是做什么的?Appium 是一个自动化测试开源工具,看到没,做测试用的,它有点类似Selenium,可以自动操作APP实现一系列的操作. ...

  6. Python爬虫入门教程 47-100 mitmproxy安装与安卓模拟器的配合使用-手机APP爬虫部分

    1. 准备下载软件 介绍一款爬虫辅助工具mitmproxy ,mitmproxy 就是用于MITM的proxy,MITM中间人攻击.说白了就是服务器和客户机中间通讯多增加了一层.跟Fiddler和Ch ...

  7. Python爬虫入门教程 46-100 Charles抓取手机收音机-手机APP爬虫部分

    1. 手机收音机-爬前叨叨 今天选了一下,咱盘哪个APP呢,原计划是弄荔枝APP,结果发现竟然没有抓到数据,很遗憾,只能找个没那么圆润的了.搜了一下,找到一个手机收音机 下载量也是不错的. 2. 爬虫 ...

  8. Python爬虫入门教程 45-100 Charles抓取兔儿故事-下载小猪佩奇故事-手机APP爬虫部分

    1. Charles抓取兔儿故事背景介绍 之前已经安装了Charles,接下来我将用两篇博客简单写一下关于Charles的使用,今天抓取一下兔儿故事里面关于小猪佩奇的故事. 爬虫编写起来核心的重点是分 ...

  9. 全面超越Appium,使用Airtest超快速开发App爬虫

    想开发网页爬虫,发现被反爬了?想对 App 抓包,发现数据被加密了?不要担心,使用 Airtest 开发 App 爬虫,只要人眼能看到,你就能抓到,最快只需要2分钟,兼容 Unity3D.Cocos2 ...

随机推荐

  1. Python语言学习前提:基础语法

    一.变量 1.变量:存储数据.存储数据需要对应内存空间,基于变量的数据类型,解释器会分配指定内存,决定什么数据被存储到内存中. 变量数据类型:整数.小数.字符. 2.变量赋值:变量在使用前必须赋值,赋 ...

  2. remove_if 的效率测试

    #include <iostream> #include <functional> #include <vector> #include <algorithm ...

  3. 894A. QAQ#(暴力)

    题目出处:http://codeforces.com/problemset/problem/894/A 题目大意:计数依次出现QAQ的次数 #include<iostream> using ...

  4. framebuffer 知识点

    设备文件是在/dev/目录下设备文件有主设备号,次设备号.当操作设备文件, 系统会根据设备文件的设备号找到相应的设备驱动(驱动在内核注册时已指定使用的设备号),并调用相应的功能.  open ---& ...

  5. BaseAdapter教程(1) 最简单地使用BaseAdapter

    Adapter就是适配器,而设计模式里也有Adapter Pattern. 而BaseAdapter就是设计模式里的思维,把一些不相关的东西放进去,经过适配器,最终都会出产同一样的东西. 就像Base ...

  6. EMD——EEMD——CEEMD语音增强算法基础

    首先,HHT中用到的EMD详细介绍:https://wenku.baidu.com/view/3bba7029b4daa58da0114a9a.html 本文具体参考 https://zhuanlan ...

  7. git命令简单使用

    git config --global user.name 'sss' git config --global user.email 'huahua@163.com' cd d:/mywork git ...

  8. 一个http的Post请求问题,unable to resolve host <我的域名>:no address associated with hostnam

    原因:你应用中写入的测试服务器地址baseURL解析不了,服务器端设置的原因: 解决:找服务端修改设置,或者Android应用中把测试地址改为上线服务器地址.

  9. 量化预测质量之分类报告 sklearn.metrics.classification_report

    classification_report的调用为:classification_report(y_true, y_pred, labels=None, target_names=None, samp ...

  10. 1)public,provite和protect不能放在函数函数头

    今天我才知道,原来这三个修饰的东西,只是用在类里面方法,怪不得一个叫方法,一个叫函数了,原来就是区分他们,哎, 今天遇到这么一个问题: <?php //header('Content-type: ...