Poco和Excel讀寫結合的應用實踐案例
1. 案例簡介
之前我們在 資料分離實踐 一文中,詳細講述了Poco和讀Excel結合的應用案例。
今天我們來聊一個Poco和Excel讀寫結合的應用案例。首先,我們提前準備了一個包含多位歌手名稱的Excel表格,命名為 read.xls
:
我們將在這個表格中讀取歌手名稱,然後依次到網易雲音樂首頁去進行搜尋,並且找到歌手的單曲;
之後,我們會拿到歌手單曲排前10位的歌曲名稱,並且把這個歌曲名稱儲存到另外一個Excel表格 write.xls
裡。
這個案例可以幫助你 自動獲取指定歌手的前10首歌曲名稱 ,看起來似乎很快樂,那就讓我們開始吧!
2. 實現找歌手單曲名稱的函式
我們先來實現這個找歌手單曲名稱的流程(假設網易雲音樂的初始狀態是首頁):
- 點選首頁的搜尋框
- 輸入歌手的名稱,比如 張藝興
- 顯示搜尋結果之後,點選“單曲”這個tab
- 然後再“單曲”下面獲取前10首歌曲的名稱
- 回到網易雲音樂的首頁(等待搜尋下一個歌手)
# -*- encoding=utf8 -*- __author__ = "AirtestProject" from airtest.core.api import * auto_setup(__file__) from poco.drivers.android.uiautomation import AndroidUiautomationPoco poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False) # 點選首頁的搜尋框 poco("com.netease.cloudmusic:id/searchBar").click() sleep(1.0) # 輸入歌手名稱 text("張藝興") sleep(3.0) # 單擊“單曲”的tab poco(name="android.widget.TextView",text="單曲").click() sleep(1.0) # 拿到前10首歌曲的名稱 count = 0 for li in poco("com.netease.cloudmusic:id/recyclerView").child("com.netease.cloudmusic:id/musicListItemContainer"): count += 1 if count <= 10: title = li.offspring("com.netease.cloudmusic:id/songName") song_name = title.get_text() print(song_name) # 回到網易雲音樂首頁 keyevent("BACK") keyevent("BACK") sleep(1.0)
流程沒問題之後,我們可以把這個找歌曲名稱的指令碼封裝成函式,因為等會要搜尋好幾個歌手的名字,需要重複用到這部分的內容:
def find_song(name): song_list = [] poco("com.netease.cloudmusic:id/searchBar").click() sleep(1.0) text(name) sleep(3.0) poco(name="android.widget.TextView",text="單曲").click() sleep(1.0) count = 0 for li in poco("com.netease.cloudmusic:id/recyclerView").child("com.netease.cloudmusic:id/musicListItemContainer"): count += 1 if count <= 10: title = li.offspring("com.netease.cloudmusic:id/songName") song_name = title.get_text() song_list.append(song_name) # print(song_name) keyevent("BACK") keyevent("BACK") sleep(1.0) return song_list
3. 實現在Excel中讀取歌手名稱的函式
那接下來,就是要從Excel的單元格中,讀取到我們要找的幾位歌手名稱,這裡我們用來讀Excel的庫依舊是之前我們講過的 xlrd
:
import xlrd
def get_excel():
ex = xlrd.open_workbook(r'D:\demo\read.xls')
sheet = ex.sheet_by_name('music')
dat = []
for row in range(sheet.nrows):
cells = sheet.row_values(row)
# 拿每一行第2個單元格的內容(即歌手名稱)
data=cells[1]
dat.append(data)
# 將拿到的歌手名稱儲存到列表中,該函式返回歌手名稱的列表
return dat
注意 xlrd
為Python的第三方庫,我們要在 import
之前把它裝到當前使用的Python環境中:
pip install xlrd
4. 把拿到的單曲名稱儲存到指定Excel中
能拿到Excel裡面的歌手名稱列表,又可以根據歌手名稱獲取前10首的歌曲名稱,那我們只要 遍歷從Excel讀出來的歌手名稱列表 ,傳給找歌曲的函式,即可獲得所有歌手的10首歌曲名稱:
li = []
for d in get_excel():
li.append(find_song(d))
最後,我們就可以把所有歌手的歌曲名稱寫到指定的表格裡了。這裡我們用到另外一個Python的第三方庫 xlwings
:
import xlwings as xw
app = xw.App(visible=True, add_book=True)
wb = xw.Book(r'D:\demo\read.xls')
sheet = wb.sheets('music')
sheet.range('C1:C4').value=li
wb.save(r'D:\demo\write.xls')
wb.close()
app.quit()
別忘記在 import
之前,先在當前Python環境中安裝好這個庫:
pip install xlwings
5. 小結
關於Airtest或者Poco專案與Excel讀寫結合的實踐,其實還有很多,比如我們可以將測試的賬號集儲存在特定的Excel表格裡,然後 測試的時候去讀取賬號集表格裡面的賬號密碼 來使用;
又或者是我們測試過程中,將拿到的一些關鍵資料,儲存到指定Excel檔案中待用等等。
在這裡我們僅以在Excel中讀取歌手名稱,然後在網易雲音樂中找到歌手單曲的前十首歌曲名稱,儲存到指定Excel的例子,來給同學們提供1個簡單的思路。(PS:需要案例完整指令碼來學習的同學,可以到公眾號後臺回覆 “Excel” 獲取)
在實際應用過程,同學們可以根據自己的需求,編寫更加複雜和專業的指令碼。
Airtest官網:https://airtest.netease.com/
Airtest教程官網:https://airtest.doc.io.netease.com/
搭建企業私有云服務:https://airlab.163.com/b2b
官方答疑 Q 群:654700783
呀,這麼認真都看到這裡啦,幫忙點個推薦支援一下唄,灰常感謝~