Pythonを使用してGitHubメッセージアシスタントを作成します(乾物共有)


githubへのサブスクリプションはますます増えており、最終的にはブックマークもサブスクリプションもありません。これらの問題を解決するには、情報の海から私たちを解放し、私たち自身のビジネスにより集中できるようにする、よりインテリジェントで柔軟な外部脳ツールが必要です。


インターネット2.0の時代、エンジニアは主にビジネス上の問題を解決するために必要なさまざまなツールやソフトウェアに依存しています。オープンソースの波が世界を席巻するにつれて、オープンソースのツールやソフトウェアも急速に成長しました。エンジニアはますます多くのテクノロジーやソフトウェアに注意を払う必要があり、学習の負担が増大し、彼らの頭脳はますます不十分になっています。しかし、より多くの技術とソフトウェアを持っている人は誰でも問題をより効率的に解決できるので、エンジニアも無力です。そのため、エンジニアはインターネット上で外部の脳ツール、特に検索エンジン、ブックマーク、github、scihubなどを使い始めました。問題を解決するエンジニアの能力は、外部の脳ツールの使用に反映されています。

しかし、エンジニアが解決すべき問題が大きくなり、彼ら自身の知識が蓄積されるにつれて、外部のブレインツールは徐々に肥大化し、ブックマークが増え、githubへのサブスクリプションが増えています。最終的には、ますます多くのブックマークなし、サブスクライブなしと同等です。これらの問題を解決するには、情報の海から私たちを解放し、私たち自身のビジネスにより集中できるようにする、よりインテリジェントで柔軟な外部脳ツールが必要です。

GitHubニュースの問題

数日以内に処理されない場合、Githubメッセージの受信トレイが山積みになることに気づきましたか?一部の学生の受信トレイの数はこれよりもさらに誇張されており、一部の学生は絶望して受信トレイの機能をあきらめたと思います。

なぜこうなった?

すべてのコーダーのほとんどがお気に入りの作品を心の中で集めたいと思っているため、githubプロジェクトのホームページの右上隅で最も目を引く位置は常に次の3つのボタンです。

エンジニアがお気に入りのプロジェクトを見るとき、ウォッチ、スタート、フォークの3つのリンクをクリックすることを躊躇しないと思います。

悲劇はここから始まりました。

1.エンジニアはますます多くのプロジェクトを好みます。

2.プロジェクトには独自のライフサイクルがあり、アクティブになるものもあれば、徐々に消滅するものもあります。

3.エンジニアは忙しくなり、受信トレイの面倒を見る時間がありません。

次に、受信トレイは次のように変更されました。

ニュースの山を見て、崩壊感はありますか?では、githubの機能の何が問題になっていますか?

時計、スター、フォークのエンジニアが求める注意のレベルが間違っているからだと思います。もちろん、githubも積極的に改善しています。以前と比較して、より多くの監視オプションがあることがわかります。

しかし、これで十分ですか?Inboxからの何万ものメッセージを毎回見て、気になる項目を1つずつ無視するように変更しますか?

エンジニアの心はまだ壊れています!

エンジニアの受信トレイを保存する方法はありますか?

持ってる!さあ、私の受信トレイを保存するために自分でやってください。

解決

Pythonを使用してGitHubメッセージアシスタントになります。これにより、エンジニアは不要なメッセージを自動的に閉じて削除できます。これは本当の時計ではありませんか?あなたがそれを見るとき、あなたはその情報を受け取り、あなたはそれを見ずに消えます。では、よく考えてみてください。エンジニアにとって本当に役立つニュースは何でしょうか。

1.長期間更新されていないプロジェクトに注意を払うことはできませんか?

2.作業範囲や関心の対象ではなくなったプロジェクトでは、注意を払うことができませんか?

3.長い間報告されていないプロジェクト、私たちはそれらに注意を払うことができませんか?

また、Pythonには、ユーザー操作を簡単に自動化できるという利点があります。これらのゾンビプロジェクトは、Pythonの自動化によって排除できるようです。それを実行して、始めましょう。

コード

Pythonには優れたWeb自動化テストフレームワークであるSeleniumがあることはわかっていますが、Seleniumは主にテストに使用され、呼び出しはまだ少し複雑です。だから私はgithubで検索し、最終的に適切なPythonパッケージを見つけました:PyChromeプロジェクトアドレス:

https://github.com/siversalih/pyChrome-Web-Automation

次に、この非主流の自動化ツールキットを使用して、ホームページを表示するための小さなアシスタントを完成させます。作成者は怠惰で、数年前に更新していませんが、幸いなことに、ヘルプは完全です。

https://pychrome.wordpress.com/usage/

だから私たちは幸せな指示に従ってロボットを組み立てることができます。

0.環境への準備

まず、Python 3.8環境を準備し、オンラインの指示に従ってSeleniumをインストールしてから、PyChromeプロジェクトをローカルに複製する必要があります。はい、環境の準備は完了です。

1.githubへのログインをシミュレートします

PyChromeを使用してgithubにアクセスする場合、Chromeブラウザの新しいインスタンスが起動されるたびに小さな問題が発生します。これにより、ローカルに保存されているCookie情報を再利用できなくなるため、毎回ログインをシミュレートする必要があります。Githubには機能があり、IPが変更された場合は確認コードを入力する必要があります。IPが変更されていない場合は不要であるため、初めて手動でのみ入力できます。

ただし、githubのログインページは比較的単純であり、ユーザー名とパスワードに対応するフォームコンポーネントを見つけるだけで済みます。したがって、以下に示すように、ログインコードは非常に簡潔にすることができます。

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.受信トレイにシミュレートする

ログイン後、受信トレイに入って未読メッセージを確認する必要があります。受信トレイは少し小さくて複雑ですが、簡単に区別することもできます。

正しいxpathを見つけてください。ポジショニングは難しくないと思います。ここでまた賢くなりましたが、実際にはニュースのあるプロジェクトに悩まされています。プロジェクトがニュースを送信しなくても、嫌がらせを受けることはありません。したがって、左下隅のリポジトリ領域を直接選択する方が効率的です。

コードは次のように表示されます。

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.ゾンビアイテムを確認します

3番目の戦略を選択しました。長い間報告されていないプロジェクトがゾンビプロジェクトの判断基準として使用されます(純粋に便宜上)。最初に問題にアクセスし、次に問題の更新日を決定します。詳細な日付フィールド。以下のコードの目的は非常に単純です。つまり、最後の問題が更新された期間です。

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.ゾンビアイテムのフォローを解除します

問題が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") 

上記のコードは、[完了]ボタンの操作をシミュレートするためのものです。

この時点で、GitHubメッセージアシスタントのすべてのロジックが完了し、受信トレイ全体がようやく静かになりました。コーヒーを飲んでリラックスすることはできますか?

追記

Python自動化ツールは、エンジニアに本当に便利さをもたらし、エンジニアが日常のさまざまな課題に対処できるようにします。すべてのエンジニアの早期リリースとフルフィルメントを容易にするために、上記のコードはオープンソースであり、完全なコードアドレスです。

https://gitee.com/knifecms/puppetry/blob/master/github-agent/resp_notify.py

さらに、このプロジェクトには他にもいくつかの興味深い自動化アシスタントとツールがあります。興味があれば、それらを研究することもできます。

あなたからもっと良いアイデアを得ることを願っています!


最後に、ソフトウェアテストデータ共有の波!

テクノロジー業界では、技術スキルを向上させ、自動化プロジェクトでの実務経験を充実させる必要があります。これは、今後数年間のキャリア計画とテストテクノロジーの習熟度に非常に役立ちます。

ゴールデン9日とシルバー10日の面接シーズン、転職、面接の質問の整理のシーズンは、長年私の習慣になっています!以下は、近年の私のコレクションと並べ替えです。全体は[ソフトウェアテスト]を中心に構成されています。メインコンテンツには、Python自動化テストの独占ビデオ、Python自動化の詳細、インタビューの質問のフルセット、その他の知識コンテンツが含まれます。

あなたと私が会い、あなたが何かを見つけることができますように!ソフトウェアテスト、インターフェイステスト、自動テスト、およびインタビューの経験を交換したい場合。WeChatパブリックアカウントをフォローする:[悲しいスパイシーストリップ]216ページのソフトウェアテストエンジニアのインタビューブックを無料で受け取ります。そして、対応するビデオ学習チュートリアルは無料で共有できます!コミュニケーション学習スカート:313782132

良い記事をお勧めします:

1年の実務経験を持つテストエンジニアとしてパッケージ化されており、面接前のアドバイスは以下のとおりです。

自動テストで正確に何を学ぶ必要がありますか?

Tencentを転職に考えてみませんか?私とガチョウ工場の間の過去について少し話してください

より高度な自動テストと手動テストのどちらですか?

初心者は必見です:資格のあるテストケースを書く方法は?

Pythonログインインターフェイステストの問題の記録と解決策(乾物)

おすすめ

転載: blog.csdn.net/weixin_50829653/article/details/113987338