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

呀,這麼認真都看到這裏啦,幫忙點個推薦支持一下唄,灰常感謝~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章