網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
背景
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。
原文鏈接:https://juejin.cn/post/7129471379723780126
相關(guān)推薦
- 2023-02-25 pandas?loc?iloc?ix用法詳細(xì)分析_python
- 2022-04-04 react Ant Design使用a標(biāo)簽href屬性警告解決方法
- 2022-04-18 Go中g(shù)routine通信與context控制實(shí)例詳解_Golang
- 2022-12-07 React元素與組件的區(qū)別示例詳解_React
- 2022-07-24 Golang?CSP并發(fā)機(jī)制及使用模型_Golang
- 2022-06-25 Docker?安裝?Consul單機(jī)模式的操作方法_docker
- 2022-11-26 docker?prune命令定時(shí)清理不常用數(shù)據(jù)的操作方法_docker
- 2022-06-26 Git配置.gitignore文件忽略被指定的文件上傳_相關(guān)技巧
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支