以下は、JavaScriptを使用してリアルタイムチャットのWebサイトを監視し、更新があったときにメッセージを表示するプログラムの例です。このプログラムでは、MutationObserverを使用してDOMの変更を監視します。 手順 チャットメッセージが表示されるDOM要素を特定します。 MutationObserverを使ってその要素の変更を監視します。 新しいメッセージが追加された場合に通知を表示します。 コード例 // 監視対象のチャットメッセージが表示される要素を取得 const chatContainer = document.querySelector('#chat-container'); // 適切なセレクタに置き換えてください if (chatContainer) { // 以前のメッセージを追跡するためのセット const previousMessages = new Set(); // MutationObserverのコールバック関数 const observerCallback = (mutationsList) => { for (const mutation of mutationsList) { if (mutation.type === 'childList') { // 新しいメッセージをチェック mutation.addedNodes.forEach((node) => { if (node.nodeType === Node.ELEMENT_NODE) { const messageText = node.textContent.trim(); if (!previousMessages.has(messageText)) { previousMessages.add(messageText); console.log('新しいメッセージ:', messageText); alert(`新しいメッセージ: ${messageText}`); // 必要に応じて通知方法を変更 } } }); } } }; // MutationObserverの設定 const observer = new MutationObserver(observerCallback); // 監視を開始 observer.observe(chatContainer, { childList: true, subtree: true }); console.log('チャットの監視を開始しました'); } else { console.error('チャットコンテナが見つかりません'); } 説明 querySelectorで監視対象の要素を取得 チャットメッセージが表示されるコンテナ要素を取得します。セレクタはWebサイトに応じて変更してください。 MutationObserverでDOM変更を監視 childList: trueを指定することで、子要素の追加や削除を監視します。 新しいメッセージの検出 追加されたノードのテキストを取得し、以前のメッセージと比較して新しいものだけを処理します。 通知の表示 alertを使用して新しいメッセージを通知しますが、必要に応じてカスタマイズ可能です(例: ブラウザ通知やログ出力)。 注意点 このコードは、対象のWebサイトのDOM構造に依存します。セレクタを正確に指定してください。 サイトによっては、CSP(コンテンツセキュリティポリシー)によりスクリプトの挿入が制限されている場合があります。 長時間監視する場合、メモリ使用量に注意してください。 必要に応じて、さらにカスタマイズしてください! GitHub Copilot ブラウザのDOM操作を行うコードは、通常ブラウザ環境で動作することを前提としています。そのため、CLI(コマンドラインインターフェース)で動作させるには、ブラウザの代わりにDOMを操作できる環境を用意する必要があります。 CLIで動作させるためには、以下のような方法を取ることができます。 方法: Puppeteerを使用する Puppeteerは、Node.jsで動作するヘッドレスブラウザ(Chromium)を操作するためのライブラリです。これを使えば、ブラウザ環境をエミュレートして、CLI上でDOM操作を行うことができます。 以下に、Puppeteerを使った例を示します。 手順 Node.jsをインストールします。 必要なライブラリ(Puppeteer)をインストールします。 Puppeteerを使ってチャットサイトを監視するスクリプトを作成します。 コード例 const puppeteer = require('puppeteer'); (async () => { // ブラウザを起動 const browser = await puppeteer.launch({ headless: false }); // headless: true にすると非表示で動作 const page = await browser.newPage(); // チャットサイトにアクセス await page.goto('https://example-chat-site.com'); // 実際のチャットサイトURLに置き換え // チャットコンテナのセレクタ const chatContainerSelector = '#chat-container'; // 適切なセレクタに置き換え // チャットコンテナがロードされるまで待機 await page.waitForSelector(chatContainerSelector); console.log('チャットの監視を開始します'); // 以前のメッセージを追跡するためのセット const previousMessages = new Set(); // チャットの監視 await page.exposeFunction('onNewMessage', (message) => { console.log('新しいメッセージ:', message); }); await page.evaluate((chatContainerSelector) => { const chatContainer = document.querySelector(chatContainerSelector); if (chatContainer) { const previousMessages = new Set(); // MutationObserverを設定 const observer = new MutationObserver((mutationsList) => { for (const mutation of mutationsList) { if (mutation.type === 'childList') { mutation.addedNodes.forEach((node) => { if (node.nodeType === Node.ELEMENT_NODE) { const messageText = node.textContent.trim(); if (!previousMessages.has(messageText)) { previousMessages.add(messageText); window.onNewMessage(messageText); // 新しいメッセージを通知 } } }); } } }); // 監視を開始 observer.observe(chatContainer, { childList: true, subtree: true }); } }, chatContainerSelector); // スクリプトを終了しないように待機 await new Promise(() => {}); })(); 説明 Puppeteerのインストール npm install puppeteer ブラウザを起動 puppeteer.launchでヘッドレスブラウザを起動します。headless: falseにするとブラウザが表示されます。 チャットサイトにアクセス page.gotoで監視対象のチャットサイトにアクセスします。 DOM変更を監視 MutationObserverを使ってチャットコンテナの変更を監視します。新しいメッセージが追加されると、window.onNewMessageを通じてCLIに通知します。 スクリプトを終了しない await new Promise(() => {});でスクリプトが終了しないようにします。 注意点 実際のチャットサイトのURLとセレクタを正確に指定してください。 サイトによってはログインが必要な場合があります。その場合、Puppeteerでログイン処理を自動化する必要があります。 サイトの利用規約を確認し、スクレイピングが許可されているか確認してください。 この方法でCLI上でリアルタイムチャットの監視が可能です!