首頁 > 軟體

python slack桌面自動化開發工具

2022-08-10 18:02:41

背景

Slack 自動化範例 - 從一個渠道抓取聯絡人列表

最近,我需要監控一些slack頻道的聯絡資訊,但我沒有API可以呼叫。所以我需要使用UI自動化來完成這個任務。 繼續使用這個庫 Clicknium,除了支援像selenium這樣的web自動化之外,它還支援桌面自動化,這對我很有用。 你可以按照這個 Visual Studio Code 擴充套件的入門來設定環境,對我來說不到 2 分鐘。

Slack 使用者端自動化 - 抓取聯絡人列表

自動選擇組和頻道。 根據組名,自動點選左側導航欄:

我使用 Clicknium Recorder 在 slack 上記錄 UI 元素,並使用引數 {{group}} 對其進行更新,如下所示,用於引數定位器,請參考Clicknium 檔案

我將視窗的標題設定為“Slack*”,因為 clicknium 支援萬用字元匹配,它可以提高自動化定位的健壯性。 並且我將 tabitem 名稱新增到引數"group",然後我可以在執行階段指定group。

from clicknium import clicknium as cc, locator, ui
ui(locator.slack.tabitem_group, {'group':group}).click()
  • 與自動點選頻道類似。
if not cc.is_existing(locator.slack.treeitem_channel, params):
    ui(locator.slack.treeitem_parent).click()
ui(locator.slack.treeitem_channel, params).click()

由於有時頻道列表被摺疊,所以我檢查目標頻道是否存在,如果沒有,需要先單擊頻道以結束頻道列表。

  • 通過獲取右上角的資訊文字來獲取聯絡人計數,然後解析文字。

text = ui(locator.slack.text_all, params).get_text()
index = text.find("members")
count = int("".join(re.findall("d+",text[0:index])))
  • 通過單擊右上角的資訊顯示聯絡人列表對話方塊。

  • 由於聯絡人列表是動態載入的,所以我們抓取了將近 10 個專案,需要向下捲動卷軸來載入新聯絡人
for i in range(1,13):
    dict = {"index":i}
    if not cc.is_existing(locator.slack.listitem_member, dict):
        continue
    elem_member = ui(locator.slack.listitem_member, dict)
    name = elem_member.get_text()
    if NotContains(names, name):
        names.append({'name':name,'email':'', 'postfix':''})
        step += 1
        if step % 100 == 0:
            SaveToFile(names)
## move mouse down to trigger new data loaded for member list
ui(locator.slack.edit_membername).click(by='mouse-emulation')
for i in range(10):
    cc.send_hotkey("{DOWN}")

我單擊查詢成員編輯框,然後傳送快捷鍵"DOWN"十次,它將觸發載入新聯絡人。 為了獲取每個成員名稱,我使用以下引數定位器:

Slack 使用者端自動化 - 抓取聯絡人詳細資訊

在上面的部分中,我展示瞭如何從頻道中抓取聯絡人列表,在本部分中,我展示瞭如何抓取每個聯絡人的詳細資訊,例如電子郵件地址。 (如果頻道沒有顯示電子郵件地址,您可以跳過此部分)。

  • 與上述部分相同,自動選擇組和頻道。
  • 通過單擊右上角的資訊顯示聯絡人列表對話方塊。
  • 輸入聯絡人姓名搜尋聯絡人
ui(locator.slack.text_all, params).click()
ui(locator.slack.edit_membername).set_text(item['name'], "set-text")
  • 如果匹配,單擊以顯示聯絡人的個人資料,然後獲取電子郵件文字 要單擊搜尋結果,我使用以下定位器, 使用引數"name"設定名稱並取消選中 listitem 層。

  • 本節中的錯誤處理:
    • 如果搜尋失敗,需要關閉對話方塊並迭代到下一個聯絡人。
    • 如果無法獲取電子郵件資訊,需要關閉個人資料索引標籤並迭代到下一個聯絡人。
member1 = cc.wait_appear(locator.slack.listitem_member1, {'name':item['name']})
if member1 != None:
    member1.click()
else:
    print("failed to search the member")
    item['email'] = "ignore"
    item['postfix'] = ""
    ui(locator.slack.image).click()
    continue
try:
    email = ui(locator.slack.text_email).get_text(timeout=5)
    item['email'] = email
    item['postfix'] = email.split('@')[1]
except:
    print("failed to find the email")
    item['email'] = "ignore"
    item['postfix'] = ""
    if cc.is_existing(locator.slack.image):
        ui(locator.slack.image).click()
        continue

開原始碼

我把程式碼放在我的github上,如果需要檢視完整程式碼,請參考github

以上就是python slack桌面自動化開發工具的詳細內容,更多關於python slack桌面自動化的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com