python 版 appcrawler

off_wind發表於2020-10-20

專案地址:https://gitee.com/hyt777/app-py-crawler

appPyCrawler

python+appcrawler = appPyCrawler

基於 airtest+poco 的 app 自動遍歷工具

該框架的核心思路來自於 思寒大佬做的appcrawler

但由於大佬是基於 Scala 編寫的,對於我來說執行起來有點不方便

並且蒙陰與目前 AirTest 下 poco 框架的發展,相比於 appium 來說穩定了許多

因此有了編寫一個 airtest+poco 的基於 python 的 app 爬蟲測試框架

安裝依賴

python 版本為 3.6

airtest 安裝
pip install airtest

配置檔案

config.yml

devices: # airtest 連結裝置的字串
  - Android://127.0.0.1:5037/127.0.0.1:62025?cap_method=JAVACAP

start_app: cn.ehanghai.android.hex # 啟動的應用的packa

start_action_list: # 啟動應用後的動作列表,只在應用啟動後按順序執行一次。
  - action: wait # 等待
    info: 10
  - action: click # 點選,
    info:
      name: cn.ehanghai.android.hex:id/statement_agree
  - action: swipe # 滑動,info可以選擇 left,right,也可以直接寫點(本質是 pos1,pos2 = eval("(0.8, 0.5), (0.1, 0.5)"))
    info: (0.8, 0.5), (0.1, 0.5)
  - action: swipe # 第二次滑動 目前沒有做次數設定,如果動作要重複多次,那就複製貼上幾次
    info: (0.8, 0.5), (0.1, 0.5)

select_list: # 篩選列表,首先對控制元件進行初步篩選
  - enabled: true
    visible: true
    type: android.widget.ImageView
  - enabled: true
    visible: true
    type: android.widget.TextView
  - enabled: true
    visible: true
    type: android.widget.ImageButton
  - enabled: true
    visible: true
    editalbe: true
    type: android.widget.EditText
  - enabled: true
    visible: true
    checkable: true
    type: android.widget.CheckBox


first_list: # 優先列表,出現以下控制元件優先點選
  - name: cn.ehanghai.android.hex:id/cancle_tv
  - name: cn.ehanghai.android.hex:id/iv_map_close

trigger_dict: # 遇到對應的控制元件,觸發對應的操作
  修改暱稱:
    target:
      name: cn.ehanghai.android.hex:id/change_name
    trigger:
      action: send_key
      text: _(:3」∠❀)_
      time: 1

back_list: # 返回按鈕,一般最後點選
  - name: cn.ehanghai.android.hex:id/iv_back
  - name: 轉到上一層級
  - text: 確定
  - text: 儲存

black_list: # 黑名單
  - text: 相簿

執行

``
python main.py


### 執行邏輯

程式注意的執行邏輯如下
```python
class Crawler:
    def __init__(self):
        self.config = yaml.load(open("config.yml", encoding="utf-8"))
        self.driver = Driver(self.config)

        self.init_actions = [  # 初始化用的action
            StartAppInitAction(),  # 啟動app設定
            StartActionInitAction(),  # app啟動後的動作設定
        ]

        self.actions = [SelectAction(),  # 初步進行控制元件篩選
                        FilterAction(),  # 對特定的控制元件進行篩選
                        BlackAction(),  # 將在黑名單中的控制元件排除
                        FirstAction(),  # 優先點選的控制元件,執行run後續不執行
                        TriggerAction(),    # 觸發器,遇到特定控制元件進行特定的操作,執行run後續不執行
                        BackHeadAction(),   # 將返回型別的按鍵單獨取出來
                        NormalAction(),     # 一般的控制元件,每個控制元件預設點選一次,執行run後續不執行
                        BackEndAction(),    # 前面的都沒有執行,那麼點選返回按鈕
                        ]


    def crawler(self):
        self.init()

        while self.run():
            pass

    def init(self):
        for action in self.init_actions:
            action.run(self.config, self.driver)

    def run(self):
        for action in self.actions:
            if not action.entrance(activity, self.config, self.driver):
                return True
        return False

主要是按順序執行 action,可以隨意插入 action 來擴充功能
後續是希望可以透過配置檔案來動態配置 action

新人第一次發帖,希望大家多多提建議
目前還只是 demo 能跑的階段,需要改的地方還很多。
我能力有限希望大家也來幫忙

相關文章