tokumeitokumei
@tokumeitokumei (匿名)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Chrome拡張機能でChatGPTの送信ボタンのクリック検知ができない

拡張機能内でChatGPTの送信ボタンがクリックできない

できないこと)GoogleChromeの拡張機能を作っているのですが、クリックの検知ができません。

ChatGPTのサイト(https://chat.openai.com/chat) でのみ機能する拡張機能なのですが、
1.入力した内容を
2.送信ボタンを押した段階で取得する
ということができません。

image.png
(画像お借りしました:https://ai-gptopia.com/howto-chatgpt/)

そのあとにOpenAIAPIに通していろいろやる...ということをしたいのですがその前段階で詰まっています。

まずは送信ボタンを押したらコンソールに文章("送信"等)を表示させたいです。
どうしたら送信ボタンのクリック検知を行えるでしょうか?

manifest.json

{
    "name": "exsample",
    "version": "1.0.0",
    "manifest_version": 3,
    "description": "example",
    "permissions": ["activeTab", "scripting"],
    "content_scripts": 
    [
        {
            "matches": ["https://chatgpt.com/*"],
            "js": ["content.js"]
        }
    ]
}  

content.js

document.getElementById("submitButton").addEventListener("click", () => {
            console.log("送信");
        });

自分で試したこと(ChatGPTに助けてもらいつつ)

0.フォームの構造はどうなっているのか調べた

デベロッパーモードを見たところ

<form class="w-full" type="button" ...</form>
    (divがたくさんあって)
    .
    .
    .
    <button data-testid="send-button" ...</button>

となっていた。構造自体はtype="button"のformの中にあるbuttonのようらしいです。

1.buttonのidを調べた

まずは

document.getElementById("Button_id").addEventListener("click", () => {
            console.log("送信");
        });

のように書くのが一般的だと思ったので、デベロッパーツールでbuttonのidを調べました。
するとidは無く、代わりに

<button data-testid="send-button"....

とありました。そこでコードを

document.querySelector('[data-testid="send-button"]').addEventListener("click", () => {
            console.log("送信");
        });

のように変更しましたが、これではコンソールにログは表示されませんでした。

2.そもそも送信ボタンは何をクリックしているのか

もしかしたらbuttonではなく他の何かかもしれないと思いました。以下のコードで、調べたところ

// ページ全体でクリックイベントを監視
document.addEventListener('click', function(event) {
    // クリックされた要素を取得
    const clickedElement = event.target;

    // クリックされた要素の詳細をコンソールに表示
    console.log('Clicked element:', clickedElement);
});

コンソール内容

Clicked element: <svg xmlns=​"http:​/​/​www.w3.org/​2000/​svg" width=​"32" height=​"32" fill=​"none" viewBox=​"0 0 32 32" class=​"icon-2xl">​<path fill=​"currentColor" fill-rule=​"evenodd" d=​"M15.192 8.906a1.143 1.143 0 0 1 1.616 0l5.143 5.143a1.143 1.143 0 0 1-1.616 1.616l-3.192-3.192v9.813a1.143 1.143 0 0 1-2.286 0v-9.813l-3.192 3.192a1.143 1.143 0 1 1-1.616-1.616z" clip-rule=​"evenodd">​</path>​</svg>​

どうやらクリックしているもの自体はsvgらしいようです...???

3.SVG要素に直接イベントリスナーを設定する

効果なし

// SVG要素を取得
const svgElement = document.querySelector('svg');

// SVG要素にクリックイベントリスナーを追加
svgElement.addEventListener('click', () => {
    console.log('SVG element clicked');
});

4.SVG要素のクリックイベントを親要素で処理する

効果なし

// 親要素(例えばボタン)を取得
const parentButton = document.querySelector('[data-testid="send-button"]');

// 親要素にクリックイベントリスナーを追加
parentButton.addEventListener('click', () => {
    console.log('Parent button clicked, triggered by SVG');
});

この後もいろいろやったがどうにもうまくいかず。何時間も使ってしまったので助けていただきたい次第です。
もし何かわかる方いらっしゃいましたら宜しくお願いいたします。

0

1Answer

読み込みタイミングじゃないですかね?
document.querySelector('[data-testid="send-button"]')で取得できるならconsole.logして実際に実行タイミングでそれがあるか確認してください
ないならDOMContentLoaded で実行タイミングずらしたり、setTimeoutでn秒後に実行してみてください
https://developer.mozilla.org/ja/docs/Web/API/Document/DOMContentLoaded_event

どうやらクリックしているもの自体はsvgらしいようです...???

これは多分クリックした箇所にSVGがあったのかと思います

0Like

Your answer might help someone💌