作为爬虫工程师,没有价格不知道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 webdriverdesired_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'] = Truedesired_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 = 500start_y = 900distance = 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 jsonfrom save_data import mongo_infodef 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 pymongofrom pymongo.collection import Collectionclass 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学下教程也会继续为大家更新!

appium启动app失败_Python学下教程:另辟蹊径,appium抓取app应用数据了解一下相关推荐

  1. python模拟app操作_Python爬虫入门教程 49-100 Appium安装+操作51JOB_APP(模拟手机操作之一)手机APP爬虫-阿里云开发者社区...

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

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

    原标题:Python学习教程:另辟蹊径,appium抓取app应用数据了解一下 作为爬虫工程师,没有价格不知道selenium的. 什么是selenium? Selenium原本是一个用于Web应用程 ...

  3. python获取app信息的库_Python学习教程:另辟蹊径,appium抓取app应用数据了解一下...

    作为爬虫工程师,没有价格不知道selenium的. 什么是selenium? Selenium原本是一个用于Web应用程序自动化测试工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一 ...

  4. 非常【刑】又可【拷】的fiddler抓包实战 涵盖使用教程/下载安装/抓取手机app

    Fiddler是一款非常强大的网络抓包工具,可以帮助我们分析HTTP/HTTPS协议的流量,从而深入了解网站的运行机制,发现安全风险和性能问题.下面是Fiddler工具的基础使用方法. 视频教程:非常 ...

  5. python123 app下载_Python 逆向抓取 APP 数据

    今天继续给大伙分享一下 Python 爬虫的教程,这次主要涉及到的是关于某 APP 的逆向分析并抓取数据,关于 APP 的反爬会麻烦一些,比如 Android 端的代码写完一般会进行打包并混淆加密加固 ...

  6. python爬取app、返回的是加密数据_Python 逆向抓取 APP 数据

    今天继续给大伙分享一下 Python 爬虫的教程,这次主要涉及到的是关于某 APP 的逆向分析并抓取数据,关于 APP 的反爬会麻烦一些,比如 Android 端的代码写完一般会进行打包并混淆加密加固 ...

  7. 抓取app数据教程–fiddler抓包数据截取-薄荷app为例

    转载请注明出处:抓取app数据教程–fiddler抓包数据截取-薄荷app为例 准备工具 1.手机(安装有想要抓取数据app的iphone或者android) 2.fiddler抓包工具 安装fidd ...

  8. python爬虫app步骤_Python爬虫抓取手机APP的传输数据,python爬虫抓取app

    Python爬虫抓取手机APP的传输数据,python爬虫抓取app 大多数APP里面返回的是json格式数据,或者一堆加密过的数据 .这里以超级课程表APP为例,抓取超级课程表里用户发的话题. 1. ...

  9. pythonapp爬虫库_python爬虫抓取app列表的图标

    python爬虫抓取app列表的图标 爬虫简介 所谓的爬虫简单来说,就是通过不断的变化http请求的url,向服务器进行请求,从而获得服务器返回的相关数据,在这些数据中提取对自己有用的信息. 爬虫的步 ...

  10. python 定时自动爬取_python实现scrapy爬虫每天定时抓取数据的示例代码

    1. 前言. 1.1. 需求背景. 每天抓取的是同一份商品的数据,用来做趋势分析. 要求每天都需要抓一份,也仅限抓取一份数据. 但是整个爬取数据的过程在时间上并不确定,受本地网络,代理速度,抓取数据量 ...

最新文章

  1. 时间序列预测实例(prophet的血泪史)
  2. php拉查询封装,php实现搜索类封装示例
  3. Py之fvcore:fvcore库的简介、安装、使用方法之详细攻略
  4. C和指针之字符串strchr、strpbrk、strstr
  5. python seaborn 热图 值对应颜色_基于行值的seaborn热图配色方案
  6. 人工智能/数据科学比赛汇总 2019.3
  7. Spring Boot 学习之表单验证
  8. C# 数据类型 数据转换 自己的见解和方式
  9. SAP License:ERP具有的九种优势
  10. 基于Pytorch的多任务推荐系统开源框架
  11. T-SQL多个小计+合计,分类汇总
  12. C#:访问web.config中的常量
  13. python爬虫之模拟登陆(CSDN篇)
  14. 银行卡号与开户行对照文档
  15. C++ 租房管理系统
  16. Python中使用snip问题
  17. pwa 让你的网页可以像本地程序一样安装到电脑上,Youtube网站使用的也是当前方法 (chrome版本)
  18. 如何查看office是否永久激活版本
  19. 计算机工作流程新图,工作流程责任分工.doc
  20. 什么是MySQL数据库?应用环境有哪些?

热门文章

  1. 解决apache启动错误httpd:Could not reliably determine...
  2. 3.企业安全建设指南(金融行业安全架构与技术实践) --- 安全规划
  3. 1.OAuth 2实战 --- OAuth 2.0是什么,为什么要关心它
  4. 9.Jenkins 权威指南 --- Jenkins 维护
  5. 24.root, alias
  6. 8. Browser 对象 - History 对象(2)
  7. CSS-行内框、行框、行高
  8. html中滚动条属性设置
  9. javaweb项目静态资源被拦截的解决方法
  10. Flask--模板渲染和参数传递