爬虫学习笔记(二十一)—— Appium
文章目錄
- 一、概念和作用
- 1.1、概念
- 1.2、常見應用
- 1.3、特點
- 1.4、Appium和Selenium
- 二、安裝
- 2.1、安裝Appium客戶端庫
- 2.2、安裝Appium Desktop
- 2.3、安裝JDK
- 2.4、安裝Android SDK
- 2.5、環境配置:
- 2.6、安裝驗證
- 三、連接模擬器
- 3.1、修改模擬器文件
- 3.2、設置模擬器
- 3.3、進入開發者模式
- 3.4、在模擬器中安裝軟件
- 四、模擬器連接到Appium
- 4.1、啟動和配置Appium
- 4.2、Appium界面信息
- 4.3、uiautomatorviewer
- 4.4、shell 命令
- 五、簡單的使用示例:嗶哩嗶哩
- 5.1、Appium連接
- 5.2、UI Selector
- 5.3、Appium標簽操作
- 5.4、滑動操作
- 5.5、流程控制
一、概念和作用
1.1、概念
appium是一個移動 App (手機應用)自動化工具。支持 iOS 平臺和 Android 平臺上的原生應用,web應用和混合應用。它允許測試人員在不同的平臺(iOS,Android)使用同一套API來寫自動化測試腳本,這樣大大增加了iOS和Android測試套件間代碼的復用性。
1.2、常見應用
- 自動化任務:微信機器人
- 爬蟲:通過手機自動化,提取信息
- 自動化測試:自動化測試,提高效率
1.3、特點
- 支持多個平臺:iOS (蘋果)、安卓 App 的自動化都支持。
- 支持跨平臺運行:Appium可以用在OSX,Windows以及Linux桌面系統上運行。
- 支持多種類型的自動化:
- 支持 蘋果、安卓 應用 原生界面 的自動化
- 支持 應用 內嵌 WebView 的自動化
- 支持 手機瀏覽器 中的 web網站自動化
- 支持 flutter 應用的自動化
- 支持多種編程語言:像 Selenium 一樣, 可以用多種編程語言調用它,開發自動化程序。
- 擴展了WebDriver的協議:Appium沒有自己重新去實現一套。這樣的好處是以前的WebDriver API能夠直接被繼承過來,以前的 Selenium(WebDriver)各種語言的binding都可以拿來就用。
- appium選擇了Client/Server的設計模式。只要client能夠發送http請求給server,那么的話client用什么語言來實現都是可以的,這就是appium及Selenium(WebDriver)如何做到支持多語言的原因;
1.4、Appium和Selenium
appium類庫封裝了標準Selenium客戶端類庫,為用戶提供所有常見的JSON格式selenium命令以及額外的移動設備控制相關的命令,如多點觸控手勢和屏幕朝向。
appium客戶端類庫實現了Mobile JSON Wire Protocol(一個標準協議的官方擴展草稿)和W3C WebDriver spec(一個傳輸不可預知的自動化協議,該協議定義了MultiAction 接口)的元素。
appium服務端定義了官方協議的擴展,為appium 用戶提供了方便的接口來執行各種設備動作,例如在測試過程中安裝/卸載App。這就是為什么我們需要appium特定的客戶端,而不是通用的Selenium 客戶端。當然,appium 客戶端類庫只是增加了一些功能,而實際上這些功能就是簡單的擴展了Selenium 客戶端,所以他們仍然可以用來運行通用的Selenium會話。
二、安裝
2.1、安裝Appium客戶端庫
指令:
pip install appium-python-client2.2、安裝Appium Desktop
Appium Server 是用 NodeJS 運行的,基于JS開發出來的,Appium組織為了方便大家安裝使用,制作了一個可執行程序 Appium Desktop,把 NodeJS 運行環境、Appium Server,和一些工具 打包在里面了,只需要簡單的下載安裝就可以了。
網址:http://appium.io/
安裝示例:
2.3、安裝JDK
JDK官網下載:https://www.oracle.com/java/technologies/javase-downloads.html
2.4、安裝Android SDK
注意:現在已經不能單獨安裝Android SDK了,必須要一起下載谷歌集成好的包,包含了一個比較大的開發Android的IDE,就是Android Studio,而且Android的官方網站不能直接登錄了,這里把SDK必須的文件打了一個壓縮包,直接解壓就可以了。
鏈接:https://pan.baidu.com/s/1D3aPH5HLc73oaOtqdib4lA
提取碼:cgnb
2.5、環境配置:
2.6、安裝驗證
1、JDK, JRE 安裝驗證
2、adb 安裝驗證
三、連接模擬器
這里使用夜神模擬器,網站:https://www.yeshen.com/
注:如果連接的是手機,直接進入“進入開發者模式”步驟進行
3.1、修改模擬器文件
3.2、設置模擬器
3.3、進入開發者模式
1、進入“設置”,點擊 “關于平板電腦”–>多次點擊“版本號” ,進入開發者模式
2、啟用USB調試,點擊“開發者模式”–>開啟“USB調試”
3.4、在模擬器中安裝軟件
首先需要保證模擬器已經連接成功,然后通過命令 adb devices -l 查看
安裝軟件使用命令 adb install [安裝包路徑] ,路徑可以直接把安裝包拖進窗口。
四、模擬器連接到Appium
4.1、啟動和配置Appium
打開Appium之后直接點擊Start Server就可以了
點擊右上角放大鏡開始配置模擬器信息
可以直接復制下面的JSON數據粘貼到右側的輸入框中,其中系統版本需要自己到模擬器中的關于平板電腦選項中自己查看
{"platformName": "Android","platformVersion": "7.1.2","deviceName": "BieYa" }全部信息填寫完成后點擊Start Session啟動將Appium連接至模擬器,這時模擬器中會自動安裝一個Appium Settings的軟件,Appium通過這個軟件控制模擬器的運行。
4.2、Appium界面信息
4.3、uiautomatorviewer
這個工具可以查看APP元素的屬性,還提供了一組API,用于構建在用戶應用和系統應用上執行交互的界面測試。Appium也封裝了這個工具里面的API,所以也可以在Appium中使用這些API來操作模擬器。
參考谷歌安卓官方文檔介紹: https://developer.android.google.cn/training/testing/ui-automator
截取手機元素
元素的屬性
- NAF:true 輸入框不能輸入字符
- index:表示父節點的第幾個子節點
- resource_id:類似于id
- text:文本信息
- class:類似于標簽名與class
- package:包名
- content-desc:節點描述信息
- checkable :是否是可選擇的
- checked:是否是已選擇的
- clickable:是否是可點擊的
- enabled:可用狀態
- focusable:是否可以聚焦
- focused:是否是聚焦狀態的
- scrollable:是否是可滾動的
- long-clickable:是否可長按
- bounds:坐標 左上角和右下角
4.4、shell 命令
1、查看app應用名
adb shell dumpsys activity | findstr mFocusedActivity或
adb shell dumpsys activity recents | findstr "intent={"2、查看輸入法內容
adb shell ime list -s3、從默認的appium輸入法切換到搜狗輸入法
adb shell ime set io.appium.settings/.UnicodeIME五、簡單的使用示例:嗶哩嗶哩
5.1、Appium連接
from appium import webdriver import time from appium.webdriver.extensions.android.nativekey import AndroidKeydesired_caps = {'platformName': 'Android', #被測的手機是安卓'platformVersion': '7.1.2', #手機安卓版本'deviceName': 'BieYa', #設備名,安卓手機可以隨意填寫'appPackage': 'tv.danmaku.bili', #啟動APP package名稱 shell用查看app應用名'appActivity': '.MainActivityV2', #啟動Activity名稱'unicodeKeyboard': True, #使用自帶輸入法,輸入中文是填true'resetKeyboard': True, #執行完程序恢復原來輸入法 經常來不及執行需要手動恢復'noReset': True, #不要重置APP 重要參數 務必填True'newCommandTimeout': 6000, #固定寫'automationName': 'UiAutomator2' }#連接APPium Server,初始化自動環境 建立連接,根據參數建立連接 安裝 driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)5.2、UI Selector
#設置缺省等待時間 driver.implicitly_wait(15) time.sleep(5) #UISelector控制手機元素 點擊搜索框 # code = 'new UiSelector().text("熱門").className("android.widget.TextView")' #點擊 ‘熱門’ 標簽 code = 'new UiSelector().className("android.widget.TextView")' ele = driver.find_element_by_android_uiautomator(code) # ele = driver.find_element_by_xpath('//android.widget.TextView[@content-desc="搜索"]') ele.click()5.3、Appium標簽操作
#APPium標簽操作 time.sleep(3) #根據id定位搜索位置框,輸入 python search_tag = driver.find_element_by_id('tv.danmaku.bili:id/search_src_text') search_tag.send_keys('python') #輸入回車鍵,確定搜索 time.sleep(1) driver.press_keycode(AndroidKey.ENTER)5.4、滑動操作
def swipUp(driver, t=800, n=1):'''向上滑動屏幕'''size = driver.get_window_size()x = size['width']*0.5 # x坐標y_start = size['height']*0.75 #起始點y坐標y_end = size['height'] * 0.25 #終點y坐標for i in range(n):driver.swipe(x,y_start,x,y_end,t)5.5、流程控制
#1、加載所有標簽 -滑動 2、判斷底部 3、去重 title_list = [] #判斷底部 去重 while True:title_tags = driver.find_elements_by_id('tv.danmaku.bili:id/title')title_list_lenght = len(title_list) #判斷底部-起始長度if title_tags:for title_tag in title_tags:content = title_tag.textif content not in title_list: #去重print(content)title_list.append(content)current_length = len(title_list) #判斷底部-結束長度print(' ')if current_length == title_list_lenght:print('到底了....')breakswipUp(driver) #滑動 print('結束..........') driver.quit()結果演示:
總結
以上是生活随笔為你收集整理的爬虫学习笔记(二十一)—— Appium的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 爬虫学习笔记(二十)—— 字体反爬
- 下一篇: 爬虫学习笔记(二十二)—— Mitmpr