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

责任编辑:



推荐阅读
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • 微信平台通过盛派SDK(sdk.weixin.senparc.com)允许服务号和订阅号使用appId和token读取关注用户的个人信息。然而,这一过程需严格遵守隐私保护和数据安全的相关规定,确保用户数据的安全性和隐私性。 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 如何在服务器上配置SSL证书
    SSL证书是用于验证互联网上身份的一种数字凭证,通过启用HTTPS协议,确保用户与服务器之间的通信安全。本文将详细介绍如何在API和服务器上配置SSL证书,以提升网站的安全性和可信度。 ... [详细]
  • Flutter 开发中集成极光推送的详细步骤
    本文详细介绍了如何在 Flutter 项目中集成极光推送服务,包括配置和测试的具体步骤。 ... [详细]
  • 精选在线API编辑工具推荐
    本文将介绍几款优秀的在线API编辑工具,包括它们的功能特点和使用方法,帮助开发者提高工作效率。 ... [详细]
  • 本文最初发表在Thorben Janssen的Java EE博客上,每周都会分享最新的Java新闻和动态。 ... [详细]
  • 大家好,我是李白。本文将分享一个从零开始的全栈项目,涵盖了设计、前端、后端和服务端的全面学习过程。通过这个项目,我希望能够帮助初学者更好地理解和掌握全栈开发的技术栈。 ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 【实例简介】本文详细介绍了如何在PHP中实现微信支付的退款功能,并提供了订单创建类的完整代码及调用示例。在配置过程中,需确保正确设置相关参数,特别是证书路径应根据项目实际情况进行调整。为了保证系统的安全性,存放证书的目录需要设置为可读权限。值得注意的是,普通支付操作无需证书,但在执行退款操作时必须提供证书。此外,本文还对常见的错误处理和调试技巧进行了说明,帮助开发者快速定位和解决问题。 ... [详细]
  • 在PHP中实现腾讯云接口签名,以完成人脸核身功能的对接与签名配置时,需要注意将文档中的POST请求改为GET请求。具体步骤包括:使用你的`secretKey`生成签名字符串`$srcStr`,格式为`GET faceid.tencentcloudapi.com?`,确保参数正确拼接,避免因请求方法错误导致的签名问题。此外,还需关注API的其他参数要求,确保请求的完整性和安全性。 ... [详细]
  • 本文介绍了 Vue 开发的入门指南,重点讲解了开发环境的配置与项目的基本搭建。推荐使用 WebStorm 作为 IDE,其下载地址为 。安装时请选择适合您操作系统的版本,并通过 获取激活码。WebStorm 是前端开发者的理想选择,提供了丰富的功能和强大的代码编辑能力。 ... [详细]
  • 每日前端实战:148# 视频教程展示纯 CSS 实现按钮两侧滑入装饰元素的悬停效果
    通过点击页面右侧的“预览”按钮,您可以直接在当前页面查看效果,或点击链接进入全屏预览模式。该视频教程展示了如何使用纯 CSS 实现按钮两侧滑入装饰元素的悬停效果。视频内容具有互动性,观众可以实时调整代码并观察变化。访问以下链接体验完整效果:https://codepen.io/comehope/pen/yRyOZr。 ... [详细]
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社区 版权所有