热门标签 | 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学下教程也会继续为大家更新!返回搜狐,查看更多

责任编辑:



推荐阅读
  • Microsoft即将发布WPF/E的CTP(Community Technology Preview)和SDK,标志着RIA(Rich Internet Application)技术的新里程碑。更多详情及下载链接请参见MSDN官方页面。 ... [详细]
  • Coursera ML 机器学习
    2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
  • 本文探讨了为何相同的HTTP请求在两台不同操作系统(Windows与Ubuntu)的机器上会分别返回200 OK和429 Too Many Requests的状态码。我们将分析代码、环境差异及可能的影响因素。 ... [详细]
  • Python3 中使用 lxml 模块解析 XPath 数据详解
    XPath 是一种用于在 XML 文档中查找信息的路径语言,同样适用于 HTML 文件的搜索。本文将详细介绍如何利用 Python 的 lxml 模块通过 XPath 技术高效地解析和抓取网页数据。 ... [详细]
  • 本文介绍了如何利用Selenium和Python通过执行JavaScript代码来控制网页中的滚动条,包括垂直和水平滚动条的控制,以及特定元素的聚焦技术。 ... [详细]
  • 利用Java与Tesseract-OCR实现数字识别
    本文深入探讨了如何利用Java语言结合Tesseract-OCR技术来实现图像中的数字识别功能,旨在为开发者提供详细的指导和实践案例。 ... [详细]
  • python爬虫Demo
    1爬虫功能:爬取某域名下所有网页,比如爬取python文档 https:docs.python.orgzh-cn3 ,爬取之后, ... [详细]
  • 探索PWA H5 Web App优化之路(Service Worker与Lighthouse的应用)
    本文探讨了如何通过Service Worker和Lighthouse工具来优化PWA H5 Web App,旨在提升用户体验,包括提高加载速度、增强离线访问能力等方面。 ... [详细]
  • 本文介绍了Python编程中的字符串操作基础知识,包括字符串拼接、索引、子序列选择和查找。此外,还探讨了如何利用字符串处理技术从HTML代码中提取超链接信息,为简单的网页抓取打下基础。 ... [详细]
  • 本文介绍了如何在Django项目中使用django-crontab库来设置和管理定时任务,包括安装、配置、编写定时任务以及常见问题的解决方案。通过具体实例,帮助开发者快速掌握在Django中实现自动化任务的方法。 ... [详细]
  • 本文介绍了如何利用Java中的URLConnection类来实现基本的网络爬虫功能,包括向目标网站发送请求、接收HTML响应、解析HTML以提取所需信息,并处理可能存在的递归爬取需求。 ... [详细]
  • PHP 中 preg_match 函数的 isU 修饰符详解
    本文详细解析 PHP 中 preg_match 函数中 isU 修饰符的具体含义及其应用场景,帮助开发者更好地理解和使用正则表达式。 ... [详细]
  • 本文将介绍如何利用Python爬虫技术抓取国内主流在线学习平台的数据,并以51CTO学院为例,进行详细的技术解析和实践操作。 ... [详细]
  • 本文基于作者使用Flask框架处理后端逻辑和原生JavaScript及jQuery进行前端开发的经验,详细介绍了如何在前后端之间高效地传输JSON数据。文章不仅涵盖了技术实现细节,还提供了实用的代码示例。 ... [详细]
  • SonarQube配置与使用指南
    本文档详细介绍了SonarQube的配置方法及使用流程,包括环境准备、样本分析、数据库配置、项目属性文件解析以及插件安装等内容,适用于具有Linux基础操作能力的用户。 ... [详细]
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社区 版权所有