概要
GeminiのWebアプリ版は、Geminiとの会話履歴をエクスポートする機能が標準でありません。 そこで、Chrome等の開発者ツールのコンソール機能(JavaScript)を通じて無理やりエクスポートさせよう、というのが本記事の主旨です。
やり方・実装
Geminiから取得する箇所(コア要素)
const xpathExpr = '//*[starts-with(@id, "message-content-id-")] | //*[starts-with(@id, "user-query-content-")]'; const result = document.evaluate(xpathExpr, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); for (let i = 0; i < result.snapshotLength; i++) { const node = result.snapshotItem(i); console.log(node.id, node.innerText); // 例:idとテキストをログ出力 }
CSV形式でダウンロードする
// CSVダウンロード処理: // - 参考にさせていただきました: https://qiita.com/ooooooo_q/items/69d67aabf78820d45e46 var downloadCsv = (function() { var tableToCsvString = function(table) { var str = '\uFEFF'; for (var i = 0, imax = table.length - 1; i <= imax; ++i) { var row = table[i]; for (var j = 0, jmax = row.length - 1; j <= jmax; ++j) { str += '"' + row[j].replace(/"/g, '""') + '"'; if (j !== jmax) { str += ','; } } str += '\n'; } return str; }; var createDataUriFromString = function(str) { return 'data:text/csv,' + encodeURIComponent(str); } var downloadDataUri = function(uri, filename) { var link = document.createElement('a'); link.download = filename; link.href = uri; document.body.appendChild(link); link.click(); document.body.removeChild(link); }; return function(table, filename) { if (!filename) { filename = 'output.csv'; } var uri = createDataUriFromString(tableToCsvString(table)); downloadDataUri(uri, filename); }; })(); // Gemimiからメッセージ取得 const xpathExpr = '//*[starts-with(@id, "message-content-id-")] | //*[starts-with(@id, "user-query-content-")]'; const result = document.evaluate(xpathExpr, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); let result_for_csv = []; for (let i = 0; i < result.snapshotLength; i++) { const node = result.snapshotItem(i); let user_or_bot = ''; if (node.id.startsWith('message-content-id-')) { user_or_bot = 'bot'; } else if (node.id.startsWith('user-query-content-')) { user_or_bot = 'user'; } result_for_csv.push([user_or_bot, node.id, node.innerText]); } // CSV形式でダウンロード downloadCsv(result_for_csv);
注意
- 現在画面に表示されている要素しかダウンロードできません。そのため、会話履歴が長い場合は、先頭までスクロールした後に実行する必要があります。
- 「開く」より参照するワード形式のようなものだったり、添付画像についてはここでは取得していません。