app爬蟲之航班數據獲取

工具介紹

Airtest是網易出的基於圖像識別和Poco控件識別的一款UI自動化測試工具。其功能類似於appium,但是但是Appium的安裝配置環境相對複雜,而Airtest則顯得十分簡單,只需 去官網下載(http://airtest.netease.com/),選適合自己電腦的版本。

項目地址:http://airtest.netease.com/
快速上手教程:http://airtest.netease.com/tutorial/Tutorial.html
IDE快速上手教程:http://airtest.netease.com/docs/docs_AirtestIDE-zh_CN/1_quick_start.html

在這裏插入圖片描述

Airtest連接

打開Airtest IDE 用數據線連接手機(Airtest也支持無線連接,具體方式自行查找),並開啓手機的usb調試模式,連接手機點擊刷新ADB,正常情況下顯示查顯出連接設備,點擊connect如下圖
在這裏插入圖片描述

如能正常連接如下圖,顯示手機屏幕
在這裏插入圖片描述

工作模式介紹與選擇

在這裏插入圖片描述
AirTest 工作模式具體分爲兩種

  • 基於圖像識別

Airtest可以通過屏幕截圖的方式來獲取我們想要操作的區域。例如對一些按鈕進行測試時,我們可以不再寫複雜的代碼去獲取按鈕的信息,直接對按鈕進行截圖,把截圖放在程序中,程序就會自動識別到截圖中的位置以訪問該按鈕。

  • 基於Poco控件

Airtest可以通過pocoUI樹 查看控件的name、id等信息的來定位目標控件,再調用函數方法對控件進行不同的操作

由於圖像識別的準備確不一定是百分百識別,所以poco控件一般做爲基於圖像識爲的輔助功能,精確定位頁面元素,poco控件也可以獨自完成所有自動化工作,因爲圖像識別底層也是基於poco庫的
本次app數據爬取將採用poco控件的方式進行,第一種基於圖像識別教程的可自行百度,此提供一處博客https://www.cnblogs.com/xieqiankun/p/use_airtest.html

poco腳本錄製

點擊文件–》新建腳本—》純.py腳本(高階用戶)如下圖:
在這裏插入圖片描述
點擊python File Path 創建一個py文件,並點Ok定(其他保持默認即可),然後在poco輔助窗選 擇Android(根據手機系統自行選擇),此時可以看下面的ui樹形結構

在這裏插入圖片描述
下面介紹一下腳錄製比較常用的三個按扭
在這裏插入圖片描述
第一個是凍結按扭,點擊凍結,此時ui樹的結構不會隨着手機操作及時更新,避免手機誤操作,ui結構樹及時刷新
第二個是通過屏幕上的扭按來定位ui樹的位置,類於似瀏覽器此按扭的功能在這裏插入圖片描述
第三個是錄製功能,開啓後可以通過點手機中的按扭來生成操作代碼如點微信圖標則會生成

poco("com.miui.home:id/workspace").offspring("com.miui.home:id/cell_layout").child("微信")[0].offspring("com.miui.home:id/icon_icon").click()

此代碼一般情況下是用來參照,實際代碼可能要調整一下,比如.child(“微信”)[0],實代代碼可能不會用[0]來寫死而是用用for來處理,而.click()則按實際情況來改成對應的操作如get_text()

南方航空app腳本錄製

首先下載南方航空app,此教程不在從登錄開始,請先登錄app;

在這裏插入圖片描述

打開app

先創建的test.py,默認內容如下

# -*- encoding=utf8 -*-
__author__ = "little_y"

from airtest.core.api import *
from airtest.cli.parser import cli_setup

if not cli_setup():
    auto_setup(__file__, logdir=True, devices=[
            "Android://127.0.0.1:5037/a248a4c6",
    ])


# script content
print("start...")


# generate html report
# from airtest.report.report import simple_report
# simple_report(__file__, logpath=True)

導入
在這裏插入圖片描述
在最下載創建poco對象
在這裏插入圖片描述

點擊錄製,然後點擊app圖標生成代碼:

poco("com.miui.home:id/workspace").offspring("南方航空").offspring("com.miui.home:id/icon_icon").click()

app進入下面頁面
在這裏插入圖片描述

然後進app頁面後點擊"北京"即第一個輸入框生成代碼:

poco("com.csair.mbp:id/include_main_home_view_booking_tv_start").click()

進入頁面:
在這裏插入圖片描述
在熱門城市裏隨便 點一個如北京生成代碼

poco("android.widget.LinearLayout").offspring("android.view.ViewGroup").offspring("com.csair.mbp:id/layout_content").offspring("com.csair.mbp:id/rcyView_cities").child("android.widget.LinearLayout")[1].child("com.csair.mbp:id/book_item_city_rcyView_cities").child("com.csair.mbp:id/book_item_city_name_layout_parent")[0].offspring("com.csair.mbp:id/book_item_city_name_tv_cityName").click()

此代碼顯然是硬編碼換種寫法通過文字定位元素即:

poco(text='北京').click()

同樣操作錄製出目地的城市 選擇的代碼,也可以錄製出日期的選擇(此時教程選擇默認)

在這裏插入圖片描述
此時進行錄製搜索按扭

poco("com.csair.mbp:id/include_main_home_view_booking_llyt_querybtn").click()

進行頁面
在這裏插入圖片描述
現在要提取詳情內容:
在這裏插入圖片描述
通過定位標籤及查看ui樹可以查找出機票詳情的父類並獲取所有子標籤

array = poco("android.widget.LinearLayout").offspring("android.view.ViewGroup").\
        offspring("com.csair.mbp:id/frl_place_holder").offspring("com.csair.mbp:id/domestic_list_data_rv")\
        .children()

通過遍利子類來獲取對應的內容如下圖
在這裏插入圖片描述

遍歷提取完當前屏幕的航班信息將需要進行模擬手機滑動,首先找到

isSwip = poco("android.widget.LinearLayout").offspring("android.view.ViewGroup").offspring("com.csair.mbp:id/frl_place_holder").child("android.widget.RelativeLayout").swipe([0,-y_postion +0.2])

其中y_postion爲最後一個標籤的位置,+0.2是爲了控制滑動量,只要不使標籤遺漏就行,自行控制

注意事項

一.由於滑動不可能精控制,在邏輯中要加入去重邏輯

value = "{air_time_start}#{air_start}#{air_lishu}#{air_time_end}#{air_end}#{price}".format(air_time_start=air_time_start,air_start=air_start,air_lishu=air_lishu,air_time_end=air_time_end,air_end=air_end,price=price)
            if value in array_value:
                continue

二.滑動是否滑動到底部需要判斷此次爬取的最後一項數據與否已經存在,此處加一個列表專存放已爬過的數據用於對比

 if value in array_value:
                continue

完整代碼請點擊 app爬蟲之航班數據獲取----代碼

如何在pycharm中寫代碼並運行

如何將此代碼脫離AirTest IDE運行,
1.首先要安裝 pip install Airtest pip install pocoui 庫;
2.安裝adb驅動具體方法見https://blog.csdn.net/m0_37696990/article/details/96982615
3.將在AirTest創建py文件默認生成的那一部分代碼拷貝到pycharm中,然後開始寫代碼代運行即可;

在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章