python?slack桌面自動(dòng)化開(kāi)發(fā)工具
背景
Slack 自動(dòng)化示例 - 從一個(gè)渠道抓取聯(lián)系人列表
最近,我需要監(jiān)控一些slack頻道的聯(lián)系信息,但我沒(méi)有API可以調(diào)用。所以我需要使用UI自動(dòng)化來(lái)完成這個(gè)任務(wù)。 繼續(xù)使用這個(gè)庫(kù) Clicknium,除了支持像selenium這樣的web自動(dòng)化之外,它還支持桌面自動(dòng)化,這對(duì)我很有用。 你可以按照這個(gè) Visual Studio Code 擴(kuò)展的入門(mén)來(lái)設(shè)置環(huán)境,對(duì)我來(lái)說(shuō)不到 2 分鐘。
Slack 客戶(hù)端自動(dòng)化 - 抓取聯(lián)系人列表
自動(dòng)選擇組和頻道。 根據(jù)組名,自動(dòng)點(diǎn)擊左側(cè)導(dǎo)航欄:
我使用 Clicknium Recorder 在 slack 上記錄 UI 元素,并使用參數(shù) {{group}} 對(duì)其進(jìn)行更新,如下所示,用于參數(shù)定位器,請(qǐng)參考Clicknium 文檔
我將窗口的標(biāo)題設(shè)置為“Slack*”,因?yàn)?clicknium 支持通配符匹配,它可以提高自動(dòng)化定位的健壯性。 并且我將 tabitem 名稱(chēng)添加到參數(shù)"group",然后我可以在運(yùn)行階段指定group。
from clicknium import clicknium as cc, locator, ui ui(locator.slack.tabitem_group, {'group':group}).click()
- 與自動(dòng)點(diǎn)擊頻道類(lèi)似。
if not cc.is_existing(locator.slack.treeitem_channel, params): ui(locator.slack.treeitem_parent).click() ui(locator.slack.treeitem_channel, params).click()
由于有時(shí)頻道列表被折疊,所以我檢查目標(biāo)頻道是否存在,如果沒(méi)有,需要先單擊頻道以結(jié)束頻道列表。
- 通過(guò)獲取右上角的信息文本來(lái)獲取聯(lián)系人計(jì)數(shù),然后解析文本。
text = ui(locator.slack.text_all, params).get_text() index = text.find("members") count = int("".join(re.findall("\d+",text[0:index])))
- 通過(guò)單擊右上角的信息顯示聯(lián)系人列表對(duì)話(huà)框。
- 由于聯(lián)系人列表是動(dòng)態(tài)加載的,所以我們抓取了將近 10 個(gè)項(xiàng)目,需要向下滾動(dòng)滾動(dòng)條來(lái)加載新聯(lián)系人
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}")
我單擊查找成員編輯框,然后發(fā)送快捷鍵"DOWN"十次,它將觸發(fā)加載新聯(lián)系人。 為了獲取每個(gè)成員名稱(chēng),我使用以下參數(shù)定位器:
Slack 客戶(hù)端自動(dòng)化 - 抓取聯(lián)系人詳細(xì)信息
在上面的部分中,我展示了如何從頻道中抓取聯(lián)系人列表,在本部分中,我展示了如何抓取每個(gè)聯(lián)系人的詳細(xì)信息,例如電子郵件地址。 (如果頻道沒(méi)有顯示電子郵件地址,您可以跳過(guò)此部分)。
- 與上述部分相同,自動(dòng)選擇組和頻道。
- 通過(guò)單擊右上角的信息顯示聯(lián)系人列表對(duì)話(huà)框。
- 輸入聯(lián)系人姓名搜索聯(lián)系人
ui(locator.slack.text_all, params).click() ui(locator.slack.edit_membername).set_text(item['name'], "set-text")
- 如果匹配,單擊以顯示聯(lián)系人的個(gè)人資料,然后獲取電子郵件文本 要單擊搜索結(jié)果,我使用以下定位器, 使用參數(shù)"name"設(shè)置名稱(chēng)并取消選中 listitem 層。
- 本節(jié)中的錯(cuò)誤處理:
- 如果搜索失敗,需要關(guān)閉對(duì)話(huà)框并迭代到下一個(gè)聯(lián)系人。
- 如果無(wú)法獲取電子郵件信息,需要關(guān)閉個(gè)人資料選項(xiàng)卡并迭代到下一個(gè)聯(lián)系人。
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
開(kāi)源代碼
我把代碼放在我的github上,如果需要查看完整代碼,請(qǐng)參考github。
以上就是python slack桌面自動(dòng)化開(kāi)發(fā)工具的詳細(xì)內(nèi)容,更多關(guān)于python slack桌面自動(dòng)化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python 遠(yuǎn)程開(kāi)關(guān)機(jī)的方法
這篇文章主要介紹了Python 遠(yuǎn)程開(kāi)關(guān)機(jī)的方法,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-11-11使用Scrapy框架爬取網(wǎng)頁(yè)并保存到Mysql的實(shí)現(xiàn)
本文主要介紹了使用Scrapy框架爬取網(wǎng)頁(yè)并保存到Mysql的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07Pytorch實(shí)現(xiàn)邏輯回歸分類(lèi)
這篇文章主要為大家詳細(xì)介紹了Pytorch實(shí)現(xiàn)邏輯回歸分類(lèi),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07如何實(shí)現(xiàn)一個(gè)python函數(shù)裝飾器(Decorator)
這篇文章主要介紹了如何實(shí)現(xiàn)一個(gè)python函數(shù)裝飾器(Decorator),幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-10-10Python openpyxl庫(kù)處理Excel文件高級(jí)應(yīng)用技巧實(shí)例
openpyxl是一個(gè)用于處理Excel文件的Python庫(kù),它提供了豐富的功能,使得用戶(hù)能夠輕松地讀取、寫(xiě)入和操作Excel文件,而不需要依賴(lài)于Microsoft Excel軟件,作為一個(gè)開(kāi)源項(xiàng)目,openpyxl在Python生態(tài)系統(tǒng)中得到了廣泛的應(yīng)用,成為處理Excel數(shù)據(jù)的首選工具之一2024-01-01python抓取網(wǎng)頁(yè)時(shí)字符集轉(zhuǎn)換問(wèn)題處理方案分享
python學(xué)習(xí)過(guò)程中發(fā)現(xiàn)英文不好學(xué)起來(lái)挺困難的,其中小弟就遇到一個(gè)十分蛋疼的問(wèn)題,百度了半天就沒(méi)找到解決辦法~囧~摸索了半天自己解決了,記錄下來(lái)與君共勉。2014-06-06PyQt5打開(kāi)文件對(duì)話(huà)框QFileDialog實(shí)例代碼
這篇文章主要介紹了PyQt5打開(kāi)文件對(duì)話(huà)框QFileDialog實(shí)例代碼,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02Python+matplotlib實(shí)現(xiàn)華麗的文本框演示代碼
這篇文章主要介紹了Python+matplotlib實(shí)現(xiàn)華麗的文本框演示代碼,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01Flask框架運(yùn)用Axios庫(kù)實(shí)現(xiàn)前后端交互詳解
Axios 是一個(gè)基于promise的HTTP庫(kù),該庫(kù)是一個(gè)更好的替代ajax向后端發(fā)送數(shù)據(jù)或請(qǐng)求數(shù)據(jù)的前端組件庫(kù)。本文通過(guò)示例為大家介紹了如何運(yùn)用Axios庫(kù)實(shí)現(xiàn)前后端交互,感興趣的可以了解一下2022-12-12Python匿名函數(shù)/排序函數(shù)/過(guò)濾函數(shù)/映射函數(shù)/遞歸/二分法
這篇文章主要介紹了Python匿名函數(shù)/排序函數(shù)/過(guò)濾函數(shù)/映射函數(shù)/遞歸/二分法 ,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06