環境準備
1.環境安裝
網盤下載
需要安裝的4個東西都放這了,也可以去網上自行下載:網盤地址
1. 安裝android-sdk-windows
下載完成後解壓,點擊SDK Manager.exe安裝連接安卓的tools
手機是哪個版本的Android就下載哪一個,我這裏是Android9,其他的不用選,選中之後點右下角的Install(注:下載巨耗時,不要下錯嘍)
2. 安裝jdk
一路next即可,記住安裝位置
3. 安裝nodejs
版本不宜過高,否則appium無法啓動
4. 安裝appium
雙擊exe直接安裝
2.環境配置
環境變量中的地址都爲你自己實際安裝的地址。
- 配置android-sdk-windows環境變量(系統變量)
變量 | 值 |
---|---|
ANDROID_HOME | F:\android-sdk-windows |
path | %ANDROID_HOME%\platform-tools |
path | %ANDROID_HOME%\tools |
- 配置java環境變量
變量 | 值 |
---|---|
CLASSPATH | %JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar; |
JAVA_HOME | F:\jdk(jdk安裝目錄) |
path | %JAVA_HOME%\jre\bin |
path | %JAVA_HOME%\bin |
- nodejs環境變量
變量 | 值 |
---|---|
path | F:\nodejs(nodejs安裝目錄) |
appium使用
確保手機打開開發者模式以及USB調試,adb devices命令可以看到設備,如下:
-
打開appium
打開如下:
若環境變量配置無誤,可直接Start Server
-
代碼連接手機應用
from appium import webdriver
desired_caps = {}
desired_caps['platformName'] = 'Android' # 手機系統
desired_caps['platformVersion'] = '9' # 手機系統版本,我的爲Android 9
desired_caps['deviceName'] = 'MI 9' # 設備名,着實填寫
desired_caps['appPackage'] = 'com.ss.android.article.news' # app包名,這個爲"今日頭條"
desired_caps['appActivity'] = 'com.ss.android.article.news.activity.SplashBadgeActivity' # app入口
desired_caps["noReset"] = "True" # 不初始化手機app信息,不添加此項每次執行程序都是手機第一次打開app的情形
# 訪問服務接口,並啓動手機app。url參數是當appium啓動後,默認訪問服務地址和接口
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
執行以上代碼可以看到手機上“今日頭條”應用自動打開。
注:第一次執行appium會在手機中安裝“Appium Settings”,需要手機允許“通過USB安裝應用”,例如我的小米手機需要打開“開發者選項”下的“USB調試”、“USB安裝”以及“USB調試(安全設置)”
- 定位元素
定位元素的方法參考:
- 提取信息
from appium import webdriver
desired_caps = {}
desired_caps['platformName'] = 'Android' # 手機系統
desired_caps['platformVersion'] = '9' # 手機系統版本,我的爲Android 9
desired_caps['deviceName'] = 'MI 9' # 設備名,着實填寫
desired_caps['appPackage'] = 'com.ss.android.article.news' # app包名,這個爲"今日頭條"
desired_caps['appActivity'] = 'com.ss.android.article.news.activity.SplashBadgeActivity' # app入口
desired_caps["noReset"] = "True" # 不初始化手機app信息,不添加此項每次執行程序都是手機第一次打開app的情形
# 訪問服務接口,並啓動手機app。url參數是當appium啓動後,默認訪問服務地址和接口
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
results = driver.find_elements_by_id("com.ss.android.article.news:id/uy") # 當前一屏的所有新聞
for item in results:
title = item.find_elements_by_id("com.ss.android.article.news:id/title") # 每一條新聞的標題元素
title = title[0].text if title else '' # 標題內容
print(title)
這樣,標題就打印出來了
可以寫一個模擬上滑的操作,然後將代碼寫在循環中,這樣就可以一直採集。