热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

appiumpython抓包_Python学习教程:另辟蹊径,appium抓取app应用数据了解一下

原标题:Python学习教程:另辟蹊径,appium抓取app应用数据了解一下作为爬虫工程师,没有价格不知道selenium

原标题:Python学习教程:另辟蹊径,appium抓取app应用数据了解一下

作为爬虫工程师,没有价格不知道selenium的。

什么是selenium?

Selenium原本是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。我们爬虫工程师使用selenium来抓取动态web页面。

今天的Python学习教程我们来介绍另一款自动化测试工具,Appium。

Appium官方文档

https://github.com/DoctorQ/appium/blob/master/docs/en/about-appium/intro.md

什么是Appium?

Appium是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的。可用于IOS和Android以及firefox的操作系统。

原生的应用是指用android或ios的sdk编写的应用

移动网页应用是指网页应用,类似于ios中safari应用或者Chrome应用或者类浏览器的应用。

混合应用是指一种包裹webview的应用,原生应用于网页内容交互性的应用。

重要的是Appium是跨平台的,何为跨平台,意思就是可以针对不同的平台用一套api来编写测试用例。

同样的Appium原本是一个用于app应用自动化测试工具,我们爬虫工程师也可以利用它,在抓取app应用数据。

Appium相当于一个服务器,我们可以向Appium发送一些操作指令,Appium就会根据不同的指令对移动设备进行驱动,完成不同的动作。

一、本次Python学习教程的目的:

我们以Android平台的手机京东为例来演示Appium启动和操作App的方法,最终实现抓取手机京东商品数据。

二、准备工作

确保PC已经安装好Appium,本实例在windows环境下安装,安装的appium版本为Appium-Desktop

安装好Android开发环境,uiautomatorviewer工具(必须)、python开发环境和Python版本的Appium API(Appium-Python-Client)

android模拟器(夜神模拟器)安装好手机京东app

确保PC上已安装好mitmproxy抓包工具(必须)、fiddler抓包工具(非必须)

数据存储用数据库为Mongodb

三、获取Appium-Desktop使用的关键参数(Desired Capabilities参数)

Desired Capabilities参数:它们分别是platformName、deviceName、appPackage、appActivity。

platformName:它是平台名称,需要区分Android或iOS,我们使用的是android平台,因此为Android。

deviceName:它是设备名称,此处是手机的具体类型,deviceName可以通过adb devices命令获取。

此处注意:模拟器显示为127.0.0.1,真实手机与模拟器显示不同,真实手机为一串字母数据结合

appPackage:它是App程序包名,该参数可以在adb shell中使用logcat获取。

命令后回车

随后,打开android模拟器中的手机京东app

在adb shell中,我们可以获取到appPackage和appActivity

appActivity:它是入口Activity名,这里通常需要以 . 开头,该参数可以在adb shell中使用logcat获取。

其中:

appPackage为:com.jingdong.app.mall

appActivity为:com.jingdong.app.mall.MainFrameActivity

获取到Appium-Desktop使用的关键参数(Desired Capabilities参数)后,我们就可以启动Appium-Desktop了

四、启动Appium-Desktop服务器

确认appium-desktop启动成功后,我们就可以编写代码了

五、编写app启动代码

from appium import webdriver

desired_caps = {}

desired_caps['platformName'] = 'Android'

desired_caps['platformVersion'] = '4.4.2'

desired_caps['deviceName'] = '192.168.54.56:62001'

desired_caps['appPackage'] = 'com.jingdong.app.mall'

desired_caps['appActivity'] = 'com.jingdong.app.mall.MainFrameActivity'

desired_caps['unicodeKeyboard'] = True

desired_caps['resetKeyboard'] = True

#启动appium-desktop服务器,服务器IP根据实际填写

driver = webdriver.Remote('http://192.168.54.56:4723/wd/hub', desired_caps)

六、运行代码启动app

确认手机京东app启动成功,并且无报错后,我们就可以编写自动化代码来控制app行为了

如何来定位app内部控件节点呢

答案是使用uiautomatorviewer

通过获取控件的xpath,我们就可以定位到app控件了

七、编写自动化代码

#等待app启动

time.sleep(5)

#关闭广告,如果有

close_ad = driver.find_element_by_xpath("//android.widget.TextView[@resource-id='com.jingdong.app.mall:id/sq']")

if close_ad:

close_ad.click()

#点击分类

select_fenlei = driver.find_element_by_xpath("//android.widget.RadioGroup[@resource-id='com.jingdong.app.mall:id/tf']/android.widget.RadioButton[2]").click()

#点击搜索

select_search = driver.find_element_by_xpath("//android.widget.ImageView[@resource-id='com.jingdong.app.mall:id/xo']").click()

#输入关键字

key = '笔记本电脑'

#判断是否输入文字

while True:

if driver.find_element_by_xpath("//android.widget.EditText[@resource-id='com.jingdong.app.mall:id/xp']").text != key:

select_keyword = driver.find_element_by_xpath("//android.widget.EditText[@resource-id='com.jingdong.app.mall:id/xp']").send_keys(key)

else:

break

#点击搜索

driver.find_element_by_xpath("//android.widget.Button[@resource-id='com.jingdong.app.mall:id/el1']").click()

time.sleep(1)

start_x = 500

start_y = 900

distance = 800

#模拟手机端滑动

while True:

driver.swipe(start_x,start_y,start_x,start_y-distance)

time.sleep(0.2)

if '抱歉,没有更多商品啦' in driver.page_source:

break

自动化代码编写完成之后,运行一下,看是否有问题,如无问题,就可以进行下一步了

八、抓取应用数据包

这里,我们通过fiddler抓包工具获取到手机京东的数据包

查看response,确实是我们想要的数据,接下来就可以编写解析响应数据代码了

九、编写解析响应数据代码

import json

from save_data import mongo_info

def response(flow):

if 'client.action?functionId=search&clientVersion=5.3.0' in flow.request.url:

response_dict = json.loads(flow.response.text)

if 'wareInfo' in response_dict:

for i in response_dict['wareInfo']:

mongo_info.insert_data(i)

十、编写数据存储逻辑代码

import pymongo

from pymongo.collection import Collection

class Connect_mongo(object):

def __init__(self):

self.client = pymongo.MongoClient(host='192.168.54.41',port=27017,connect=False)

self.db_data = self.client['jingdong']

def insert_data(self,item):

collections = Collection(self.db_data,'jingdong_data')

collections.insert(item)

mongo_info = Connect_mongo()

十一、启动mitmdump,解析数据!

注意:手机或模拟器一定要设置mitmdump服务器IP的代理

启动mitmdump:

mitmdump -p 8889 -s decode_jingdong.py

十二、接下来,启动自动化控制脚本就可以抓取到数据了

python jingdong.py

十三、查看数据

更多的Python学下教程也会继续为大家更新!返回搜狐,查看更多

责任编辑:



推荐阅读
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 本文介绍了Android平台各个版本的API级别、版本号以及平台亮点,从Android 1.0到Android 10.0,共涵盖了多个版本的特点和发展历程。详细内容请参考https://developer.android.google.cn/guide/topics/manifest/uses-sdk-element.html。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • Google在I/O开发者大会详细介绍Android N系统的更新和安全性提升
    Google在2016年的I/O开发者大会上详细介绍了Android N系统的更新和安全性提升。Android N系统在安全方面支持无缝升级更新和修补漏洞,引入了基于文件的数据加密系统和移动版本的Chrome浏览器可以识别恶意网站等新的安全机制。在性能方面,Android N内置了先进的图形处理系统Vulkan,加入了JIT编译器以提高安装效率和减少应用程序的占用空间。此外,Android N还具有自动关闭长时间未使用的后台应用程序来释放系统资源的机制。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案
    ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... [详细]
author-avatar
hustjs
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有