生活随笔
收集整理的這篇文章主要介紹了
用Python+Appium自动写网课考试
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今年疫情原因,在家上網課,開啟了無聊的刷網課模式,不光在學習通上,MOOC上也有一門創新創業。
本來網課刷的好好的開兩個頁面雙倍快樂,一會就可以刷完,可是居然還有測驗。關鍵是測驗的題目百度查不到,要么就是惡心的付費解鎖。真巧我發現有一款APP基本啥網課答案都有,就打算用這個軟件完成各章的測試。可是,這居然沒有web網頁版所以不能用requests模塊批量提交解析。
問題是如果用手機的話,要一題一題復制粘貼,然后不停的切換頁面太麻煩啦。所以想著在電腦上用模擬器完成。
那啥看了一眼,要實現上述要求要用到python的Appium-Python-Client模塊等等。去學了一波。
學會了我們就開始!
需要的東西:
夜神模擬器、python3(pycharm)、appium、javaSDK、以及AndroidSDK
操作步驟
1、模擬器自行百度下載最新版本我用的夜神模擬器
2、安裝java sdk 自行百度記得添加環境變量因為android sdk要依賴 java sdk 環境
安裝驗證:cmd輸入javac如下圖所示即安裝成功
3、下載Androidsdk建議下鏡像版(因為正版要科學上網)并新建環境變量ANDROID_HOME,路徑值為SDK文件所在位置
(避坑指南:注意Android adb.exe和模擬器文件夾下的nox_adb.exe以及adb.exe版本要一樣可以把Androidsdk adb.exe改個名字直接復制到模擬器里避免版本沖突)
然后添加完路徑之后 win+r 輸入cmd打開命令行,輸入adb如果如下圖所示表示安裝成功。
接下來打開模擬器,首先打開模擬器設置找到版本號連點7下打開開發者模式并打開USB調試選項
cmd輸入指令:adb device,如圖表示連接成功。
4、安裝appuim (百度百度)
作為python操縱app的接口
附上原理圖
5、開始編寫代碼
我用的是xpath語法批量采集題目到一個txt然后按行對txt的內容進行處理,這只是單純的前端并不會與服務器交互可以安心享用(抖機靈)
下面直接貼上代碼:沒學過的建議看一下教程:
教程傳送門:點我
from appium import webdriver
from appium.webdriver.extensions.android.nativekey import AndroidKey
import timedesired_caps = {'platformName': 'Android', # 被測手機是安卓'platformVersion': '5', # 手機安卓版本'deviceName': '127.0.0.1:62001', # 設備名,安卓手機可以隨意填寫'appPackage': 'com.xuexiaoyi.xxy', # 啟動APP Package名稱'appActivity': '.MainActivity', # 啟動Activity名稱'unicodeKeyboard': True, # 使用自帶輸入法,輸入中文時填True'resetKeyboard': True, # 執行完程序恢復原來輸入法'noReset': True, # 不要重置App'newCommandTimeout': 6000,'automationName' : 'UiAutomator2',
}# 連接Appium Server,初始化自動化環境
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)# 設置缺省等待時間
driver.implicitly_wait(15)# 根據content-desc定位搜索輸入框,點擊
driver.find_element_by_accessibility_id('搜題').click()file = open(r"C:\Users\Administrator\Desktop\imu.txt")
i = 0
for line in file:i = i + 1print(i, '、', line)#加個異常處理try:# 根據classname定位搜索框search = driver.find_elements_by_class_name('android.widget.EditText')[0]search.click()search.send_keys(line)#定義一個滑動屏幕的函數def up_swipe():time.sleep(1)driver.swipe(start_x=48, start_y=535, end_x=48, end_y=100)time.sleep(1)# 根據classname定位立即搜索按鍵sousuo = driver.find_elements_by_class_name('android.widget.TextView')[6]sousuo.click()up_swipe()time.sleep(1)print('*' * 50)ques = driver.find_elements_by_class_name('android.widget.TextView')[8]print(ques.text)#有的時候題目不一樣長所以會多輸出兩個元素確保我們想要的題目在,無傷大雅覺得不好看的可以寫一個替換函數anwser = driver.find_elements_by_class_name('android.widget.TextView')[9]anwser1 = driver.find_elements_by_class_name('android.widget.TextView')[10]anwser2 = driver.find_elements_by_class_name('android.widget.TextView')[11]print(anwser.text,anwser1.text,anwser2.text)print('*' * 50)#滑動回去driver.swipe(start_x=48, start_y=268, end_x=48, end_y=800, duration=800)clear = driver.find_elements_by_class_name('android.widget.TextView')[4]clear.click()time.sleep(1)except:print("本題需要手動搜尋答案")file.close()
滑動的原因是答案的元素在下面,定位不到。所以需要滑動滑動記得加個延時函數避免出錯。
然后就可以愉快的刷題啦耶耶耶!(小伙伴也可以把內容輸出到一個txt文本中做可持續化這里就不展開了)
總結
以上是生活随笔為你收集整理的用Python+Appium自动写网课考试的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。