像Selenium爬网页一样爬手机App,可见即可爬——appium 教程(二)appium实战抓取手机知乎APP的热点标题

Appium的安装在前一篇文章写得比较详细,如果有需要,可以参考前一篇,下面介绍抓取APP数据的过程。

开始界面

Appium安装完成之后,打开Appium,如下图直接点击开始。

进入如下图界面,点击,Start Inspector Session

设置相关信息

进入如下界面,填写相关信息,主要有

"platformName": "Android",
"deviceName": "MI_8",
"appPackage": "com.zhihu.android",
"appActivity": ".app.ui.activity.MainActivity",
"noReset": true

platformName平台名称:填写Android或者iOS,deviceName设备名称:填写真机的设备名,可以通过adb devices -l(不是数字1,是小写l) 查看,model后面就是

appPackage:app包名,appActivity:app活动名,appPackage和appActivity获取方式:

  • a、启动待测apk
  • b、开启日志输出:adb logcat>D:/log.txt
  • c、关闭日志输出:ctrl+c
  • d、查看日志

用 ctrl+f 找Displayed:

Displayed com.zhihu.android/.app.ui.activity.LauncherActivity: +1s365ms

appPackage = com.zhihu.android

appActivity = .app.ui.activity.LauncherActivity

这样就找出了appPackage,但是这样找出来的appActivity可能不一定是我们需要的那个,可以启动待测apk到需要访问的界面,

通过命令adb shell monkey -p com.zhihu.android -v -v -v 1,就可以查看需要访问的界面的活动名

还有一个特别简单快速有效的方法:
通过cmd命令,前提是先打开手机中你要获取包名的APP

1. adb shell
2. dumpsys activity | grep mFocusedActivity

 

noReset设置为true,每次运行的时候就不会把APP重置,可以免去登录的麻烦步骤。

设置完成。

 

开始

 

以上设置好之后,点击Start Session就可以启动了。

但是我开始的时候一直报错:

An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: 'Command 'C:\\Users\\hola\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe -P 5037 -s 972ad0b shell pm install -g /data/local/tmp/appium_cache/3d97225b036c28750562ef8962defee6b1af19a4.apk' exited with code 1'; Stderr: ''; Code: '1'

网上查找了各种解决方案都没有解决,最后发现是我没有打开允许usb安装的权限,因为Appium会安装一个'AppiumSettings'的程序到手机,每次都会用这个程序启动。这里提醒一下,要用真机调试的话,必须打开开发者选项,然后开启USB调试,USB安装,USB调试安全设置三项,不然都可能出现错误。

打开USB安装权限之后我就成功获取到了手机界面,激动不已,接着按下图步骤操作,

最上面红色框内各按钮功能:第一个:定位元素;第二个:拖拽测试;第三个高宽比;  第四个:后退;第五个:刷新;第六个录制;第七个:校验元素;第八个:关闭

1、我们先点击第六个按钮(图标为眼睛),开始录制,会把你后面的每一个操作都转换成代码,可以选择Java/Python等,然后直接复制代码,非常方便,为了不遗漏操作步骤,所以我们从头开始录制(不过我这里不需要录制,因为我这里获取数据不需要对app执行什么操作)。

2、选择元素功能

3、选择你想要操作的地方,我想要获取热点的标题,所以我选择了这个地方

然后就出现了最右边红框部分,框内各按钮功能:Tap是点击,Send Keys是发送输入的信息,比如填写电话号码等,Clear是清除。我们这里仅仅是想获取热点标题,所以我们不做任何操作,我们往下拉,可以找到resource-id:com.zhihu.android:id/title

同理,我们还可以点击“热度”,获取热度的resource-id:com.zhihu.android:id/metrics_text

然后我们就可以通过resource-id来获取内容啦

from appium import webdriver
import time

caps = {}
caps["platformName"] = "Android"
caps["deviceName"] = "MI_8_SE"
caps["appPackage"] = "com.zhihu.android"
caps["appActivity"] = ".app.ui.activity.MainActivity"
caps["platformVersion"] = "9"
caps["autoGrantPermissions "] = True
caps["noReset"] = True

driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
time.sleep(6)
el1 = driver.find_elements_by_id("com.zhihu.android:id/title")
el2 = driver.find_elements_by_id("com.zhihu.android:id/metrics_text")
contents=[]
for i in range(len(el1)):
    print(el1[i].text, el2[i].text,len(el1))

获取元素的方式常用的有:

driver.find_element_by_xpath("//")

driver.find_element_by_id("com.zhihu.android:id/title")

如果想要获取列表多个数据:

就把find_element_by_id改为find_elements_by_id

driver.find_element_by_id("com.zhihu.android:id/title").text就可以获取text数据

或者driver.find_element_by_id("com.zhihu.android:id/title").get_attribute('text')或get_attribute('href')

 

如果我想要获取知乎热点里面的每一条评论呢?怎么办?前面说了,选中热点标题后,右边红框就会出现,点击Tap,就会跳转到详细界面,获取数据同上

 

 

 

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值