0

C# アプリケーションからクロムを制御しようとしています。

C# アプリケーションと Chrome の間にかなり単純な API を確立しようとしています。

- Navigate to url
- Find HTML element based on some criteria (typically to be done via jQuery)
- Click on the selected element
- Repeat as needed

私の C# プログラムは、この種の作業を行う複数の Chrome インスタンスを管理します。

私が実装しようとしている解決策は、Chrome 拡張機能の「コンテンツ」スクリプトを使用することです

ここに私の現在の Manifest.json があります:

{
    "name": "ScraperAPI",
    "manifest_version": 2,
    "version": "0.0.1",
    "content_scripts":  [
                {
                "matches": [ "<all_urls>" ],
                "js": [ "AutomationApi.js"],
                "run_at" : "document_start",
                "all_frames" : false
                }
    ],
    "permissions": [ "tabs", "http://*/*", "storage" ]
    "web_accessible_resources": [ "jQuery.min.v.2.0.3.map" ]
}

コンテンツ スクリプトは WebSocket を使用して C# アプリケーションと通信します

これまでのところ、WebSocket は API 要求 (「ナビゲート」など) と応答 (「ドキュメント準備完了」など) の通信に非常にうまく機能しています。

私の拡張機能は、ドキュメントの準備ができていることをリッスンし、C# プログラムに対して WebSocket を開きます。- これは機能します

私の問題は次のとおりです。

[1] Chrome の起動時にコンテンツ スクリプトを自動的に起動するにはどうすればよいですか? ナビゲーション バーに手動で URL を入力するまで、拡張機能が読み込まれないようです

コンテンツ スクリプトは、クロム インスタンスで初めて実行されていることをどのように認識できますか?

[2] ページが読み込まれた後もコンテンツ スクリプトの一般的な状態を維持する方法。

具体的には、C# プログラムはコンテンツ スクリプトを使用して URL に移動し、特定の HTML 要素を見つけてクリックし、「ドキュメントの準備ができた」後、ブラウジングを続行し、ページをさらにクリックします。

残念ながら (私にとっては)、ページが読み込まれるたびに、Chrome はコンテンツ スクリプトの新しいインスタンスを読み込みます。

==> I don't know how to have the script determine whether it is running for the first time or not.
    On the first time through it has to open a WebSocket to the C#. On subsequent loads in the same tab
    I want it to recognize that the WebSocket connection exists and continue using it.

    I tried to create a 'window.myApi' object to save data, but each page seems to get a new window object.

    I was going to try to use 'local storage' but that is shared between all local instances of all the scripts
    and a fresh instance of the content script does not know whether it is running for first time or not.

    By the way, when my content script opens a WebSocket to the C#, the C# responds with a unique id (GUID) so
    all further communications use this unique id in the messages.

    It would be great if a content script can tell if it has been assigned a unique id by the C# program.

    Is there an 'uber' window for the entire Chrome instance that I can latch onto?

Chrome セッションを自動化するには、別のアプローチ (コンテンツ スクリプトを使用しない) を使用する必要がありますか?

見逃した状態を保存する方法はありますか?

どんな助けでも大歓迎です。

-よろしくお願いします [デビッド]

4

1 に答える 1