本教程將指導您使用 uiautomator2
庫編寫腳本,實現自動化操作。如果您需要在設備斷開連接或出現異常時重新連接設備并繼續執行任務,這里有一份詳細的代碼示例和使用說明。
環境準備
-
安裝 Python:
- 確保您的系統上安裝了 Python(推薦使用 Python 3.7 及以上版本)。
- 可以從Python 官網下載并安裝。
-
安裝 uiautomator2:
pip install uiautomator2
-
安裝 ADB:
- 確保您的系統上安裝了 ADB(Android Debug Bridge)。可以從ADB 下載頁面下載。
-
連接設備:
- 確保您的 Android 設備通過 USB 連接到計算機,并且開發者模式和 USB 調試已啟用。
腳本代碼
以下是用于連接設備、啟動 ATX-Agent、啟動應用并處理廣告的腳本代碼:
import uiautomator2 as u2
import time
import osdef connect_and_setup_device(retry_interval=1, max_retries=10):retries = 0while retries < max_retries:try:d = u2.connect()if d:print('設備連接成功')breakexcept Exception as e:print(f'設備連接失敗,重試 {retries + 1}/{max_retries} 次,錯誤: {e}')time.sleep(retry_interval)retries += 1retry_interval *= 2 # 指數退避算法else:raise RuntimeError('設備連接失敗,達到最大重試次數。')# 打印設備信息print('設備信息:', d.info)# 啟動 ATX-Agenttry:d.shell('chmod 775 /data/local/tmp/atx-agent')d.shell('/data/local/tmp/atx-agent server -d')d.shell('/data/local/tmp/atx-agent server --nouia')print('ATX-Agent 啟動成功')except Exception as e:print(f'啟動 ATX-Agent 失敗: {e}')raiseprint('連接完成~')return ddef main():d = connect_and_setup_device()os.system('adb shell am force-stop cn.wenyu.bodian')time.sleep(2)num = 1while True:try:# 檢查設備連接狀態d.shell('echo test')os.system('adb shell am start -n cn.wenyu.bodian/cn.wenyu.bodian.MainActivity')print("應用啟動成功")if d(text='跳過廣告').exists:d(text='跳過廣告').click()print("點擊:跳過廣告")time.sleep(2)if d(description='去看看').exists:d.click(0.49, 0.324)print("點擊:去看看")time.sleep(2)try:d.click(0.781, 0.065)print('點擊廣告入口成功')except:print('點擊廣告入口失敗')if d(description='開啟免費模式').exists:d(description='開啟免費模式').click()print('執行:d(description=開啟免費模式).click()')else:d.click(0.574, 0.078)print('開始看廣告了d.click(0.574, 0.078)')d(description='獲取更多時間').click_exists()start_time = time.time()if d(description='關閉聲音').exists:while d(description='關閉聲音').exists:elapsed_time = time.time() - start_timetime.sleep(elapsed_time)print('等待', elapsed_time, '秒')try:d(description='關閉廣告').click_exists()print('廣告已關閉')except Exception as e:print("關閉廣告元素不存在:", e)else:try:d(text='點擊一下,立即免費聽歌').wait(timeout=4)d(text='點擊一下,立即免費聽歌').click()print('點擊一下,立即免費聽歌')time.sleep(2)d.keyevent('4')time.sleep(2)d(resourceId='cn.wenyu.bodian:id/tme_ad_skip_button').click()print('廣告跳過')except Exception as e:print("廣告跳過元素不存在:", e)time.sleep(3)num += 1print('執行第:', num, '次看廣告')except Exception as e:print(f'發生異常: {e}')print("嘗試重新連接設備...")d = connect_and_setup_device()if __name__ == "__main__":main()
使用說明
-
連接和啟動設備:
connect_and_setup_device
函數用于連接設備并啟動 ATX-Agent。如果連接失敗,它會重試多次,并使用指數退避算法增加重試間隔。
-
啟動應用并處理廣告:
main
函數是腳本的入口。它首先連接設備并啟動應用,然后在主循環中執行自動化操作,包括點擊廣告入口、處理廣告等。- 如果在執行過程中發生異常,腳本會嘗試重新連接設備并繼續執行。
注意事項
-
連接設備:
- 確保設備通過 USB 連接到計算機,并啟用開發者模式和 USB 調試。
-
設備權限:
- 運行腳本之前,確保已授予設備必要的權限,例如存儲權限和安裝應用權限。
-
異常處理:
- 腳本包含基本的異常處理邏輯。如果遇到更復雜的錯誤場景,可以根據需要擴展異常處理部分。
-
調試和日志:
- 在實際使用過程中,可以添加更多的日志信息,以便更好地調試和監控腳本運行狀態。
通過本教程,您可以使用 uiautomator2
庫編寫一個自動化腳本,實現設備連接、應用啟動和廣告處理等操作。如果遇到設備連接問題或異常,腳本會自動重新連接設備并繼續執行,從而提高了自動化任務的可靠性和穩定性。