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可以選擇 leftright,也可以直接寫點(本質是 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能跑的階段,需要改的地方還很多。
我能力有限希望大家也來幫忙

相關文章