python slack桌面自動化開發工具
背景
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桌面自動化的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- 淺談Laravel中使用Slack進行異常通知
- python playwright之元素定位示例詳解
- Pytorch 中的optimizer使用說明
- MySQL連表查詢分組去重的實現示例
- pytorch 優化器(optim)不同參數組,不同學習率設置的操作