3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

1.概要

質問したいことをファイルに書いておくと、 Microsoft Copilot (Bing AI Chat) に自動で問合せしてくれるPythonスクリプトを書きました。
Microsoft Copilot (Bing AI Chat)
ChatGPT でのやり方は、APIも用意されているため色々情報はありますが、 Copilot でのやり方は情報が少なかったため書いてみました。 Copilot を使用される方のお役に立てれば幸いです。

2.前提環境

Selenium を使用し、スクレイピングを行うことで Cpilot の操作を実現します。
以下に記載する内容で動作することを確認できております。

名前 バージョン
OS Windows11
Python 3.11.9
Selenium 4.21.0

3.コード

具体的な動きは、以下のような動きです。

  • 質問ファイル (data/input/input.txt) に質問したいことを書きます。
  • スクリプト (RequestCopilot.py) を実行すると質問ファイルの質問を読み取り、1行ずつ Copilot に送信していきます。
  • Copilotからの返答は結果ファイル(data/output/output_yyyymmddss.txt)に記録されます。(yyyymmddssはRequestCopilot.pyが実行された時間が入ります。)
RequestCopilot.py
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import datetime
import os
import time

def request_copilot(input_text):
    # ウェブドライバ設定
    driver=webdriver.Chrome()

    # 起動したいサイトのURLを入力
    driver.get('https://copilot.microsoft.com/')
    
    # 質問を入力するテキストボックスを取得
    time.sleep(10)
    shadowroot1=driver.find_element(By.CLASS_NAME, 'cib-serp-main').shadow_root
    shadowroot2=shadowroot1.find_element(By.ID, 'cib-action-bar-main').shadow_root
    shadowroot3=shadowroot2.find_element(By.CSS_SELECTOR, 'div > div.main-container > div > div.input-row > cib-text-input').shadow_root
    input=shadowroot3.find_element(By.ID, 'searchbox')
    # テキストボックスに質問入力
    input.send_keys(input_text)
    
    # 質問の送信ボタンを取得
    time.sleep(10)
    sendbutton=shadowroot2.find_element(By.CSS_SELECTOR, 'div > div.main-container > div > div.bottom-controls > div > div.bottom-right-controls > div.control.submit > button')
    # 質問の送信ボタンをクリック
    sendbutton.click()
    
    # copilotからの返答を取得
    time.sleep(30)
    shadowroot4=driver.find_element(By.CLASS_NAME, 'cib-serp-main').shadow_root
    shadowroot5=shadowroot4.find_element(By.ID, 'cib-conversation-main').shadow_root
    shadowroot6=shadowroot5.find_element(By.CSS_SELECTOR, '#cib-chat-main > cib-chat-turn').shadow_root
    shadowroot7=shadowroot6.find_element(By.CSS_SELECTOR, 'cib-message-group.response-message-group').shadow_root
    shadowroot8=shadowroot7.find_element(By.CSS_SELECTOR, 'cib-message[type=text]').shadow_root
    output=shadowroot8.find_element(By.CSS_SELECTOR, 'cib-shared > div').get_attribute('aria-label')
    return(output)


# デスクトップのパスを取得
desktop_path=os.path.expanduser('~/Desktop')
# 質問一覧ファイルの場所を指定
input_text_path=desktop_path+R"\copilot\data\input\input.txt"
# 出力用ファイルの末尾に付ける現在時刻を取得 
dt=datetime.datetime.now()
# copilotからの返答を出力するファイルの場所を指定
output_text_path=desktop_path+R"\copilot\data\output\output_"+dt.strftime('%Y%m%d%H%M%S')+".txt"

with open(input_text_path,encoding="utf-8") as f1:
    for input_text in f1:
        output_text=request_copilot(input_text)
        with open(output_text_path,'a',encoding="utf-8") as f2:
            f2.write('##########\n')
            f2.write('■質問\n')
            f2.write(input_text)
            f2.write('##########\n')
            f2.write('■返答\n')
            f2.write(output_text+'\n')
            f2.write('##########\n')
            f2.write('\n')

GoogleChrome及びChromeDriverについて
インストールされていない場合は、実行時に自動でインストールされます。(Selenium 4.21.0 では確認済み)
インストールされる場所は C:\Users<ユーザー名>.cache\selenium です。

例として質問ファイルの内容を以下のようにして、スクリプトを実行します。

input.txt
東京都中央区で住みやすい駅を教えてください。治安が良くて、緑が豊かな場所がいいです。
東京都港区で住みやすい駅を教えてください。治安が良くて、緑が豊かな場所がいいです。

すると結果ファイルは以下のようになります。

output_yyyymmddss.txt
##########
■質問
東京都中央区で住みやすい駅を教えてください。治安が良くて、緑が豊かな場所がいいです。
##########
■返答
Copilot が送信しました: もちろんです!東京都中央区で住みやすい駅をご紹介しますね。以下は、東京都内で住みやすい駅のランキングです。[^1^]

1. **吉祥寺駅**: JR中央・総武線と京王井の頭線が乗り入れており、商業施設や飲食店が充実しています。アクセスも良く、緑豊かなエリアです。
2. **中野駅**: JR中央・総武線と東京メトロ東西線が利用でき、アニメやポップカルチャーの発信地としても知られています。
3. **新宿駅**: JR山手線や湘南新宿ラインなどが乗り入れており、多彩なショッピングやグルメスポットがあります。

また、中央区内でも築地駅や日本橋駅などが治安が良く、アクセスも便利なエリアです。[^4^] どの駅も緑が多く、おだやかな雰囲気を楽しめることでしょう。ぜひ参考にしてくださいね!🌿
##########

##########
■質問
東京都港区で住みやすい駅を教えてください。治安が良くて、緑が豊かな場所がいいです。
##########
■返答
Copilot が送信しました: もちろん、お手伝いします!東京都港区は多くの魅力的なエリアがありますよ。以下は、一人暮らし、二人暮らし、家族向けの住みやすい駅をご紹介します。

1. **一人暮らし向けの駅**:
    - **都営大江戸線大門駅**: 都心へのアクセスが良く、治安も良好です[^1^]。
    - **都営三田線白金高輪駅**: 利便性が高く、緑豊かなエリアです[^1^]。
    - **東京メトロ南北線麻生十番駅**: 交通アクセスが良く、食料品の価格も手頃です[^1^]。

2. **二人暮らし向けの駅**:
    - **都営三田線三田駅**: 学生が多く、治安も良好です[^1^]。
    - **東京メトロ銀座線虎ノ門駅**: 都心へのアクセスが良好で、飲食店も豊富です[^1^]。

3. **家族向けの駅**:
    - **東京メトロ銀座線青山一丁目駅**: 静かで住みやすいエリアで、子育てに適しています[^1^]。
    - **東京メトロ銀座線表参道駅**: おしゃれな雰囲気で、周辺にはスーパーや病院も多くあります[^1^]。

港区は治安が良く、緑豊かな住環境が整っているため、快適な生活ができることでしょう。[^1^] 🌿
##########

(吉祥寺駅、中野駅、新宿駅は中央区ではない気がする…。多分質問の仕方が悪かったです…。)

4.準備方法及び使い方

  • Python をインストールしていない場合は、インストールしてください。
  • PowerShell 又はコマンドプロンプトを開き、以下のコマンドを実行して Selenium をインストールしてください。
pip install selenium==4.21.0
  • 以下のリポジトリを ZIP でダウンロードしてください。
    リポジトリ
    ダウンロードした ZIP はデスクトップ配下に「copilot」というフォルダ名で解凍/展開してください。
  • <デスクトップのパス>\copilot\data\input\input.txt を開き、Copilot に質問したいことを書いてください。質問したいことが複数個ある場合は改行して書きます。(1行につき1個の質問を書く形です。)
  • PowerShell 又はコマンドプロンプトを開き、以下のコマンドを実行して RequestCopilot.py を実行してください。
python <デスクトップのパス>/copilot/RequestCopilot.py
  • 実行が完了するのを待ってください。1つの質問につき約1分ほどかかります。
  • <デスクトップのパス>\copilot\data/output/output_yyyymmddss.txt を確認し、Copilot からの返答を確認してください。(yyyymmddss は RequestCopilot.py が実行された時間が入ります。)

5.改善したいこと、次やりたいこと

  • Web ページが表示されるまでの待機処理を改善し、実行時間を短縮したい。現在は余裕を持たせた秒数で time.sleep している。
  • Copilot のチャットが1ラリーで終わってしまう仕様なので、複数回続けられるコードも書きたい。
3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?