成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

如何用 Python 制作 GitHub 消息助手

瀏覽:4日期:2022-06-27 14:25:58

在互聯網2.0時代,工程師解決業務問題主要依賴的是自己掌握的各種工具和軟件伴隨著席卷全球的開源浪潮,開源工具和軟件也迅猛增長。工程師需要關注的技術和軟件也隨之越來越多,學習負擔越來越大,大腦也越來越不夠用。但工程師們也很無奈,因為誰掌握的技術和軟件越多,誰就能更高效的解決問題。于是工程師們開始借助互聯網外腦工具:尤其是搜索引擎、書簽、github、scihub等 而工程師們解決問題的能力就體現在了對外腦工具的利用上。但是,隨著工程師們要解決的問題增長以及自身知識的積累,外腦工具也逐漸變得臃腫:書簽越來越多,github的訂閱越來越多,多到最后就約等于沒有書簽、沒有訂閱了。為了解決這些問題,我們需要更智能靈活的外腦工具,能讓我們從信息的海洋中解放出來,讓我們能更加專注自身業務。

GitHub 消息的問題

如何用 Python 制作 GitHub 消息助手

有沒有發現你的 Github 消息 Inbox 過幾天不處理,就會堆積成山呢?相信有的同學 Inbox 里的數字比這個還要夸張,甚至有的同學已經絕望的放棄了 Inbox 這個功能。為什么會這樣?因為每個Coder內心大多都會喜歡收藏喜愛的作品,而github的項目主頁右上角最醒目的位置總是擺著這三個按鈕:

如何用 Python 制作 GitHub 消息助手

相信工程師們看到喜愛的項目,就會毫不猶豫的一鍵三連:watch、start、fork。悲劇也就從這里開始了。1、工程師喜歡的項目越來越多;2、項目會有自己的生命周期,有的變得活躍,有的逐漸消亡;3、工程師越來越忙,無暇顧及Inbox。然后,Inbox就變這樣了:

如何用 Python 制作 GitHub 消息助手

看著滿是堆積的消息,是不是有種崩潰的感覺。那github的功能到底出了什么問題?我認為是 watch、star、fork 需要工程師投入的關注程度搞錯了。當然現在github也在積極改進,相比以前,我們可以發現有了更多的 watch 選項:

如何用 Python 制作 GitHub 消息助手

但是僅僅這些就夠了嗎?看著 Inbox 動輒上萬條的消息,難道要將自己關注的項目一個個的修改為 Ignore?工程師的內心依然是崩潰的!有沒有辦法拯救工程師的Inbox?有!來吧,自己動手拯救我的收件箱。

解決方案

用 python 做一個 GitHub 消息助手,自動幫工程師關閉和刪除不必要的消息。這不也就是真正意義上的Watch嗎?你看它的時候,會接收它的信息,你不看了它就消失了。那么仔細想想,到底哪些消息真正對工程師有用呢?1、已經很久沒更新的項目,是不是就可以不關注了?2、已經不是工作范圍和興趣點的項目,是不是也可以不關注了?3、已經很久都沒人反饋問題的項目,是不是也可以不關注了?而python有一個優勢就是可以很方便的實現用戶操作的自動化 嗯,看起來這些僵尸項目都可以用python自動化的方式清除掉 說干就干,讓我們開始吧!

代碼實現

我們知道Python有一款很棒的Web自動化測試框架:Selenium,但 Selenium 主要還是用于測試,調用還是略顯復雜。所以筆者在github上搜刮了一番,終于找到一款合適的Python包:PyChrome 項目地址:https://github.com/siversalih/pyChrome-Web-Automation下面我們就用這款非主流的自動化工具包,完成我們的小助手 看主頁,這個作者很懶,幾年前就沒有更新了,但幸好說明幫助還是挺全的:https://pychrome.wordpress.com/usage/所以我們就可以 happy 的按照說明書來組裝機器人了。

0.環境準備

首先需要準備Python 3.8環境,然后按照網上說明安裝 Selenium,接下來將PyChrome項目 clone到本地。ok,環境準備完成。

1、模擬登錄github

使用PyChrome訪問github有個小麻煩,每次都會啟動一個全新的Chrome瀏覽器實例。這就導致無法重復利用保存在本地的cookie信息,所以每次要模擬登陸下。github有一個特點,如果ip變更,需要輸入驗證碼,如果ip不變則不需要,所以第一次我們只能先手工輸入一次。

如何用 Python 制作 GitHub 消息助手

不過github的登錄頁面相對簡單,只需要找到Username和password對應的表單組件就可以了。所以登錄的代碼可以非常簡潔,如下所示:

browser.open('https://github.com/login')# name='login'name_locator = '//*[@name=’login’]'el_name = browser.findElementByXPath(name_locator) browser.sendTextToElement(username, el_name) # name='password'pass_locator = '//*[@name=’password’]'el_pass = browser.findElementByXPath(pass_locator) browser.sendTextToElement(password,el_pass) login_locator = '//*[@name=’commit’]'el_login = browser.findElementByXPath(login_locator) browser.clickElement(el_login)2.模擬進入Inbox

登錄完成后,我們需要進入收件箱,查看到底有哪些未讀消息。收件箱有點小復雜,不過也還能很方便的區分。

如何用 Python 制作 GitHub 消息助手

找到了正確的xpath,相信定位也不是難事。這里我又取了個巧,我們被困擾的其實是有消息的項目,如果一個項目不發消息,我們其實也不會被騷擾到。所以直接選取左下角的 Repositories 區域似乎效率更高一些。代碼如下:

browser.open('https://github.com/notifications')# 獲取有消息的Repositories列表locator = 'js-notification-sidebar-repositories'el_repos = browser.findElementByClass(locator) repos_list = browser.findElementsByTag('li', el_repos)3.檢查僵尸項目

我選用第三條策略,已經很久沒人反饋問題的項目作為判斷僵尸項目的標準(純粹只是因為方便實現),首先訪問issue,然后判斷issue里的更新日期,恰好有一個詳細的日期字段。下面代碼目的很簡單,就是獲取最后一條issue更新了多久。

browser.newTab('https://github.com/' + repos_name + '/pulls?q=') # 判斷最近的 pull request locator = '//div[@aria-label=’Issues’]' el_pulls = browser.findElementByXPath(locator) pull_list = browser.findElementsByTag('relative-time', el_pulls) timedelta = 0 if type(pull_list)==list and len(pull_list)>0:# 2020-11-10T00:55:39Z# last_pull_time_str = pull_list[0].getAttribute('datetime')last_pull_time_str = pull_list[0].get_attribute('datetime')last_time = datetime.strptime(last_pull_time_str, '%Y-%m-%dT%H:%M:%SZ')timedelta = (datetime.now() - last_time).days logger.debug(repos_name + ' timedelta: ' + str(timedelta) + ' days')4.取消關注僵尸項目

如果issue已經超過了1年,自然就應該取消關注了,畢竟目前信息更新的速度太快了。

# 取消不活躍項目的訂閱(1年以上沒有pull request)if unsubscribe and timedelta > 366: el_notify_button =browser.findElementsByTag('notifications-list-subscription-form') browser.clickElement(el_notify_button) time.sleep(1) # data-target='notifications-list-subscription-form.menu' locator = '//*[@data-target=’notifications-list-subscription-form.menu’]' el_notify_menus = browser.findElementByXPath(locator) # value='ignore' sub_locator = '//*[@value=’ignore’]' el_ignore_button =browser.findElementByXPath(sub_locator, el_notify_menus) browser.clickElement(el_ignore_button) logger.debug(repos_name + ' cancel subscribed')5.刪除僵尸項目消息

最后,該是解除困擾的時候了,這種不再更新的項目,工程師自然也不要再被它的消息騷擾。

el_repos_link = browser.findElementByTag('a', repos) browser.clickElement(el_repos_link) # mr-1 js-notifications-mark-all-prompt time.sleep(1) el_sel_all =browser.findElementByClass('js-notifications-mark-all-prompt') browser.clickElement(el_sel_all) time.sleep(1) # title='Done' done_locator = '//*[@title=’Done’]' el_done = browser.findElementByXPath(done_locator) browser.clickElement(el_done) logger.debug(repos_name + ' remove notifiy')

以上代碼就是模擬 Done 按鈕的操作:

如何用 Python 制作 GitHub 消息助手

到這里就完成了GitHub消息助手的全部邏輯,整個Inbox終于清靜了,是不是可以喝杯咖啡愜意一下了。

如何用 Python 制作 GitHub 消息助手

后記

Python自動化工具的確是給工程師們帶來了便捷,使得工程師能應對各種日常不同的挑戰。為方便各位工程師小伙伴們早日解脫、得償所愿,以上代碼已開源,完整的代碼地址:https://gitee.com/knifecms/puppetry/blob/master/github-agent/resp_notify.py另外,該項目下,還有幾個其他有意思的自動化助手和工具喲,大家感興趣的話也可以研究研究。希望得到你的更多好點子!

以上就是如何用 Python 制作 GitHub 消息助手的詳細內容,更多關于Python 制作 GitHub 消息助手的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
欧美三级视频在线观看| 欧美午夜精品久久久久久超碰| 在线视频精品| 国产亚洲欧美一级| 国产xxx精品视频大全| 欧美日韩国产综合一区二区三区| 三级欧美在线一区| 国产美女诱惑一区二区| 亚洲人午夜精品天堂一二香蕉| 欧美日韩精品伦理作品在线免费观看| 日韩欧美一区二区不卡| 国产麻豆日韩欧美久久| 欧洲人成人精品| 国产精品不卡一区二区三区| 91香蕉视频污在线| 91精品国产综合久久久蜜臀图片 | 欧美xxxxxxxx| 精品亚洲国内自在自线福利| 色哟哟一区二区三区| 亚洲综合区在线| 激情丁香综合| 国产三级精品视频| 99久久伊人精品| 日韩色视频在线观看| 日本欧美韩国一区三区| 国产欧美日韩一区| 国产精品青草久久| 暖暖成人免费视频| 久久亚洲私人国产精品va媚药| 国产成人在线免费| 91.xcao| 国产一区二区三区免费看| 欧美亚洲动漫制服丝袜| 亚洲成年人影院| 国产亚洲第一区| 亚洲欧美偷拍卡通变态| 欧美精品激情| 国产精品素人视频| 韩国一区二区三区美女美女秀| 久久综合色综合88| 91在线观看视频| 久久综合久久综合久久| av在线一区二区三区| 26uuu亚洲| 国产白丝精品91爽爽久久| 日韩欧美亚洲另类制服综合在线| 高清成人免费视频| 欧美zozo另类异族| 9人人澡人人爽人人精品| 欧美草草影院在线视频| caoporn国产一区二区| 久久久精品天堂| 欧美午夜免费影院| 亚洲欧美视频在线观看| 亚洲欧洲另类| 亚洲狼人国产精品| 国产精品一区在线播放| 亚洲444eee在线观看| 91精品1区2区| 国产麻豆9l精品三级站| 欧美成人精品福利| 欧美国产激情| 亚洲欧美一区二区视频| 国产精品久久久亚洲一区| 午夜视频一区二区三区| 玖玖视频精品| 久久精品国产一区二区三区免费看| 国产欧美日韩亚洲| 日韩在线播放一区二区| 色综合久久久久久久久| 国内偷窥港台综合视频在线播放| 欧美一区二区国产| 欧美激情自拍| 亚洲综合图片区| 老鸭窝亚洲一区二区三区| 日韩国产欧美三级| 91精品国产一区二区三区香蕉| 成人国产在线观看| 国产精品久久久久一区| 亚洲一区二区三区免费在线观看| 国产精品久线观看视频| 国产视频久久| 裸体一区二区三区| 91麻豆精品国产91久久久| 成人av片在线观看| 中文字幕亚洲电影| 久久尤物视频| 国产福利一区二区三区在线视频| 国产亚洲人成网站| 日韩午夜高潮| 精品一区二区三区在线观看国产 | 国产99久久久国产精品潘金网站| 国产午夜亚洲精品羞羞网站| 国产日韩一区欧美| 久久国产精品99久久人人澡| 日韩女同互慰一区二区| 国模吧视频一区| 亚洲黄色录像片| 欧美日韩一区二区不卡| 91丨porny丨国产| 亚洲一级片在线观看| 欧美精品久久天天躁| 亚洲欧美另类图片小说| 欧美亚洲综合一区| 亚洲18影院在线观看| 欧美一级在线免费| 在线成人av| 美腿丝袜亚洲色图| 国产欧美日韩精品在线| 可以看av的网站久久看| a4yy欧美一区二区三区| 午夜电影一区二区三区| 欧美一级二级三级蜜桃| 亚洲免费播放| 成人三级在线视频| 亚洲最大成人网4388xx| 欧美一区二区在线免费观看| 亚洲精品欧美精品| 国产精品综合视频| 综合激情成人伊人| 欧美二区三区的天堂| 99国产一区| 高清在线观看日韩| 一区二区三区国产| 欧美mv和日韩mv国产网站| 久久精品欧美| 欧美日韩一区二区国产| 美女mm1313爽爽久久久蜜臀| 国产精品嫩草99a| 欧美高清精品3d| 今天的高清视频免费播放成人| 极品少妇xxxx偷拍精品少妇| 亚洲视频免费看| 欧美一级理论片| 午夜在线播放视频欧美| 99国产精品久久久久久久久久 | 欧美亚洲国产bt| 欧美精品三级| 狠狠色综合播放一区二区| 亚洲欧美国产三级| 日韩欧美中文字幕公布| 午夜在线视频观看日韩17c| 91丝袜美腿高跟国产极品老师| 欧美激情第二页| 国产剧情一区二区| 亚洲高清一区二区三区| 日本一区二区高清| 欧美一区二区免费| 91精品1区2区| 国产一区二区高清| 国产综合久久| 成人短视频下载| 美女视频黄频大全不卡视频在线播放| 国产精品蜜臀在线观看| 91精品国产aⅴ一区二区| 免费在线成人av| 国产精品影视天天线| 欧美日本在线观看| 亚洲影视综合| 亚洲视频中文| 成人动漫一区二区在线| 韩国毛片一区二区三区| 亚洲 欧美综合在线网络| 成人免费在线视频| 久久品道一品道久久精品| 欧美伊人精品成人久久综合97 | 在线视频一区二区三| 国产欧美日韩视频一区二区三区| 欧美影视一区| 成人三级伦理片| 国产一区二区三区在线观看免费| 三级不卡在线观看| 亚洲宅男天堂在线观看无病毒| 国产亚洲美州欧州综合国| 日韩一二在线观看| 精品视频资源站| 在线观看日韩电影| 美日韩精品视频| 99精品视频免费| 国产精品成人观看视频免费| 99久久伊人精品| 高清久久久久久| 国产精品一级黄| 一级日本不卡的影视| 中文字幕一区二区三| 国产人成亚洲第一网站在线播放| 精品欧美一区二区久久| 欧美一区二区三区视频在线| 欧美日韩和欧美的一区二区| 91成人在线观看喷潮| 在线中文字幕不卡| 色婷婷精品久久二区二区蜜臂av | 91精品蜜臀在线一区尤物| 91精品国产手机| 91精品国产色综合久久不卡电影 | 一区二区三区欧美久久| 亚洲va欧美va人人爽| 免费一级欧美片在线观看| 精久久久久久久久久久| 国产成人福利片|