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ラリーで終わってしまう仕様なので、複数回続けられるコードも書きたい。