DifyのPlaywrightプラグインを使ってみた。（けっこうめんどくさい笑笑）

## DifyにPlaywrightのプラグインが出ましたね！！
早速つかってみたよ！

前提条件
1. Playwrightは、Web版Difyにインストールしただけでは動かない。
=> playwrightプラグインをローカルＰＣで起動させて、ngrokを使って公開し、Web版Difyから使う。（めんどくさ）
　
2. インストールが必要なもの
 1 playwrightプラグイン
 2 ngrok
 3 nodejs(npxコマンド実行に必要)
　
3. 各種事前設定方法
 1) playwrightプラグインをインストールする
 https://cloud.dify.ai/plugins?category=discover
 で、検索窓に　playwright　と入力すると、playwrightが表示されるので、マウスを持っていき、インストールボタンをクリックしてインストールします。
![スクリーンショット (71).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530784/0ece925b-4e08-49c8-bb4d-5df29be1645c.png)
　
　
 2) difyのエージェントから使うので、エージェントもインストールする
 https://cloud.dify.ai/plugins?category=discover
 で、検索窓に　agent　と入力すると、Dify Agent Strategies が表示されるので、マウスを持っていき、インストールボタンをクリックしてインストールします。
![スクリーンショット (80).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530784/8e04b35c-8530-485f-9742-6d73bca90165.png)
　
　  
 3)playwrightプラグインをローカルＰＣで起動する
 コマンドプロンプトで以下のように入力します
 ```bash
 npx -y playwright@1.51.0 run-server --port 3003 --host 127.0.0.1
 ```
  こうなればOK
 ```bash
 npx -y playwright@1.51.0 run-server --port 3003 --host 127.0.0.1
 Listening on ws://127.0.0.1:3003/
 ```
![スクリーンショット 2025-04-29 095919.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530784/43784919-e0fd-4fb4-aa9e-614c53bc9ab8.png)

 

 4)ngrokで、ローカルＰＣのplaywrightプラグインを公開する(インストール方法は検索してね)
 ```bash
 ngrok http 3003
 ```
 以下のように表示されたらOK！
 ```bash
 ngrok
 Route traffic by anything: https://ngrok.com/r/iep                     Session Status                online
 Account                       Shinji Yoshinaga (Plan: Free)
 Version                       3.22.1
 Region                        Japan (jp)
 LLatency                       41ms
 eb Interface                 http://127.0.0.1:4040
 Forwarding                   https://76b4-240b-c020-480-5abb-9557-722a-dade-3a22.ngrok-free.app -> http://localhost:3003
 
Connections                   ttl     opn     rt1     rt5     p50     p90
                               0       0       0.00    0.00    0.00    0.00 
 ```
 ![スクリーンショット 2025-04-29 100035.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530784/5a5ed35b-e975-401d-839a-9819d2e6f63e.png)

### まだ終わらないよ（笑笑） 
　
4. Difyでの設定
　1.　Dify　→　ツール　→　playwright　→　認証する　
　　　とクリックして、Playwright URIに、ngrokで表示された
   　　公開用url https://76b4-240b-c020-480-5abb-9557-722a-dade-3a22.ngrok-free.app　
    のhttpsをwssに変更した以下を設定します。
```bash
wss://76b4-240b-c020-480-5abb-9557-722a-dade-3a22.ngrok-free.app
``` 

![スクリーンショット 2025-04-29 100603.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530784/1e6c8e09-cd61-4bb3-b065-e1fc58025b00.png)
　
Playwright URI　に　wss://76b4-240b-c020-480-5abb-9557-722a-dade-3a22.ngrok-free.app　を貼り付ける（これは、私の例なのであなたの場合は自分のURLを書いてね）
　
![スクリーンショット (82).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530784/41024198-21bc-4d43-9888-2db03fe80f3f.png)

この設定でできたこと：DifyのPlaywrightプラグインから、ローカルＰＣのDifyが実行できるようになった。（多分）

　
　2. エージェントブロックで、Playwrightを使えるように設定する
　ワークフローを以下のように設定します。
 　![スクリーンショット 2025-04-29 102629.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530784/00ca32c7-769c-4921-8c32-d819142baa72.png)


 
- 開始ノードの設定は、何もしません。 
- エージェントノードの設定は以下の通り
 ![スクリーンショット 2025-04-29 102811.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530784/95fae745-15ea-4e95-8615-18d7bed49795.png)
　
　INSTRUCTIONにロジックを書きます。これをエージェントがPlwyrightにFunctionCallingで投げるようです。
　QUERYには、Playwrightが取得したデータをどうしたいのか書きます。
　

- 終了ノードの設定は以下の通り
![スクリーンショット 2025-04-29 103335.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530784/d227d2c4-0974-4dbd-9c87-dca8eeec6450.png)

 
5. できたアプリを実行します。
①実行をクリック　→　しばらく待つ　→　②結果をクリック　→　③Example Domain が表示されたらOK
![スクリーンショット 2025-04-29 103731.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530784/d543c188-01df-46c7-8a51-bd21b754a146.png)

終了！！
お疲れさま～

### 詳細設定方法は、以下のどこかに記載されてますので、ご確認を。
### とにかくめんどくさいので、時間と心に余裕があるときにやってみよう！

 　

   
どう使うか分からないので、Google AI Studioに質問した結果！
<details>
<summary>Google AI Studio 質問(playwright詳細ページについて質問)</summary>
Difyのplaywrightプラグインの使い方を教えて

以下は、詳細ページです。
https://marketplace.dify.ai/plugins/hjlarry/playwright

---
logo-site
Marketplace
Submit plugin

plugin-hjlarry/playwright-logo
playwright
0.0.1
A tool can be used to automate the browser with playwright script.

hjlarry
/
playwright
1381 installs
Install

playwright
Author: hjlarry
Version: 0.0.1
Type: tool
Repo&Issue: https://github.com/hjlarry/dify-plugin-playwright

A tool can be used to automate the browser with playwright script.

Get Started
1. run your playwright server
The default port 3000 is already used by dify, you should change to another port.

Option 1 (Use Docker)

docker run -p 3003:3000 --rm --init -it --workdir /home/pwuser --user pwuser mcr.microsoft.com/playwright:v1.51.0-noble /bin/sh -c "npx -y playwright@1.51.0 run-server --port 3000 --host 0.0.0.0"
Option 2 (Use npx)

npx -y playwright@1.51.0 run-server --port 3003 --host 0.0.0.0
2. Authroize
Use ws://<IP>:3003 to authorize.

3. Execute script
The script should like this:

page = browser.new_page(); page.goto('http://playwright.dev'); result = page.screenshot();
using ; to separate commands. Assign the final output to the variable result(only support string and bytes). Utilize the browser variable to access the browser object.

4. The agent can use this tool well

CATEGORY
Tool
VERSION
0.0.1
hjlarry
·
2025-04-03 17:28:13
Version history
REQUIREMENTS
Maximum memory
256MB

</details>

<details>
<summary>Google AI Studio 回答(playwright詳細ページについて質問)</summary>
はい、承知いたしました。DifyのPlaywrightプラグインの使い方について、提供された情報に基づいて解説します。

このプラグインは、Difyの中からPlaywrightスクリプトを実行してブラウザ操作を自動化するためのツールです。

**使い方（セットアップと実行手順）**

1.  **Playwrightサーバーの起動:**
    *   **重要:** Difyはデフォルトでポート3000を使用するため、Playwrightサーバーは**別のポート**（例: 3003）で起動する必要があります。
    *   **方法1: Dockerを使用する場合**
        *   以下のコマンドを実行して、Dockerコンテナ内でPlaywrightサーバーを起動します。ポート`3003`をホスト側でリッスンし、コンテナ内のポート`3000`に接続します。
        ```bash
        docker run -p 3003:3000 --rm --init -it --workdir /home/pwuser --user pwuser mcr.microsoft.com/playwright:v1.51.0-noble /bin/sh -c "npx -y playwright@1.51.0 run-server --port 3000 --host 0.0.0.0"
        ```
    *   **方法2: npxを使用する場合 (Node.jsがインストールされている環境)**
        *   以下のコマンドを実行して、直接Playwrightサーバーを起動します。ポート`3003`でリッスンします。
        ```bash
        npx -y playwright@1.51.0 run-server --port 3003 --host 0.0.0.0
        ```
    *   `--host 0.0.0.0` は、どのIPアドレスからの接続も受け付ける設定です。

2.  **Difyでのプラグイン認証:**
    *   DifyのマーケットプレイスからPlaywrightプラグインをインストールします。
    *   インストール後、プラグインの設定画面（通常は「ツール」や「Agent」の設定内）で認証情報を入力します。
    *   認証情報として、**`ws://<IPアドレス>:3003`** の形式で入力します。
        *   `<IPアドレス>` の部分には、**ステップ1でPlaywrightサーバーを実行しているマシンのIPアドレス**を入力します。
        *   もしDifyと同じマシンでPlaywrightサーバーを実行している場合は、`localhost` や `127.0.0.1` を試してみてください (例: `ws://localhost:3003`)。
        *   Dockerを使用している場合や、別のマシンでサーバーを実行している場合は、そのマシンの適切なIPアドレスを指定する必要があります。

3.  **スクリプトの実行:**
    *   DifyのAgentやチャットフロー内でこのプラグイン（ツール）を選択し、実行したいPlaywrightスクリプトを入力します。
    *   **スクリプトの書き方のルール:**
        *   複数のコマンドはセミコロン `;` で区切ります。
        *   ブラウザオブジェクトには `browser` という変数名でアクセスできます。
        *   最終的にDifyに返したい結果（例: スクリーンショットのデータ、取得したテキストなど）は、**`result`** という変数に代入する必要があります。
        *   `result` に代入できるのは、**文字列 (string)** または **バイト列 (bytes)** のみです。
    *   **スクリプト例:**
        ```python
        # 新しいページを開き、指定したURLにアクセスし、スクリーンショットを取得して result に代入する
        page = browser.new_page(); page.goto('http://playwright.dev'); result = page.screenshot();
        ```
        この例では、ページのスクリーンショット（バイト列）が `result` に代入され、Difyに返されます。

4.  **Agentでの利用:**
    *   説明によると、このプラグインはDifyのAgentとうまく連携できるようです。
    *   つまり、Agentに対して自然言語で「〇〇のウェブサイトを開いて、特定の情報を取得して」といった指示を出すと、Agentが内部で適切なPlaywrightスクリプトを生成し、このプラグインを使って実行してくれる可能性があります。

**補足・注意点:**

*   **IPアドレス:** Difyを実行している環境からPlaywrightサーバーを実行しているマシンへネットワーク的に到達可能である必要があります。ファイアウォール設定なども確認してください。
*   **Playwrightのバージョン:** プラグインが特定のPlaywrightバージョン（この例では`1.51.0`）に依存している可能性があるため、サーバー起動時は指定されたバージョンを使うのが安全です。
*   **エラー:** うまく動作しない場合は、Playwrightサーバーのログや、Dify側のエラーメッセージを確認してください。ポート番号の競合や、IPアドレスの指定ミス、スクリプトの構文エラーなどが考えられます。

これで、DifyでPlaywrightプラグインを使用するための基本的な手順は以上です。特定の操作（要素のクリック、テキスト入力、情報抽出など）を行いたい場合は、Playwrightのドキュメントを参照してスクリプトを作成し、上記のルールに従って記述してください。
</details>


<details>
<summary>Google AI Studio 質問(Web版Difyでは使えない？＝＞使える！！)</summary>
もしかして、difyをwebで使っていると使えない？
</details>


<details>
<summary>Google AI Studio 回答(Web版Difyでは使えない？＝＞使える！！)</summary>
はい、その可能性が高いです。

**理由:**

1.  **ネットワーク接続:** DifyのWeb版 (dify.ai など) は、Difyが管理するクラウドサーバー上で動作しています。一方、Playwrightプラグインを使用するには、あなたが Playwright サーバーを起動する必要があります (Docker または npx を使用)。
2.  **アクセス制限:** あなたがローカルマシン (自分のPC) や、社内ネットワークなどのプライベートな環境で Playwright サーバーを起動した場合、Difyのクラウドサーバーからそのサーバーへ**直接ネットワーク接続することが通常できません**。
    *   例えば、認証情報として `ws://localhost:3003` や `ws://192.168.1.10:3003` (プライベートIPアドレス) を指定しても、DifyのWebサーバーからは到達できないため、プラグインは機能しません。

**Web版で使うための条件 (技術的に可能ですが、推奨されない場合や追加設定が必要):**

*   **Playwrightサーバーをインターネットに公開する:**
    *   あなたが起動する Playwright サーバーに、**グローバルIPアドレス**を割り当て、ファイアウォールでポート (例: 3003) を開放する必要があります。
    *   これにより、DifyのWebサーバーから `ws://<あなたのグローバルIP>:3003` のようにアクセスできるようになります。
    *   **ただし、これはセキュリティ上のリスクを伴います。** Playwrightサーバーに認証機能がない場合、インターネット上の誰からでもアクセスされてしまう可能性があります。
*   **トンネリングサービスを使う (例: ngrok):**
    *   ngrokのようなサービスを使うと、ローカルで実行しているサーバー (例: `localhost:3003`) を一時的にインターネットに公開し、公開URL (例: `wss://xxxx.ngrok.io`) を取得できます。
    *   この公開URLをDifyのプラグイン認証情報として設定すれば、Web版Difyからでも接続できる可能性があります (WebSocket (wss) 対応が必要)。
    *   ただし、これは一時的な利用やテスト向けであり、安定性やセキュリティ面で本番運用には向かない場合があります。

**推奨される方法:**

*   **Difyをセルフホストする:**
    *   もしブラウザ自動操作を頻繁に利用したいのであれば、Dify自体を自分でサーバーにインストールして運用する（セルフホスト）のが最も確実です。
    *   セルフホスト環境であれば、Difyサーバーと同じマシンや同じローカルネットワーク内で Playwright サーバーを起動し、`ws://localhost:3003` や `ws://<ローカルIP>:3003` で容易に接続できます。

**結論として、DifyのWeb版を利用している場合、追加のネットワーク設定やツールなしに、ローカルで起動したPlaywrightサーバーを利用するプラグインを使うのは難しいでしょう。**
</details>


<details>
<summary>Google AI Studio 質問(ngrok活用でWeb版Difyから使う方法を教えて)</summary>
プラグインを自分のローカルパソコンで起動して、ngrokでトンネルを作って、Difyから使ってみたい
</details>

<details>
<summary>Google AI Studio 回答(ngrok活用でWeb版Difyから使う方法)</summary>
はい、承知いたしました。ローカルPCでPlaywrightサーバーを起動し、ngrokを使ってそれをインターネットに公開し、DifyのWeb版から利用する手順を説明します。

**前提条件:**

*   **Node.jsとnpm (またはDocker):** Playwrightサーバーを起動するために必要です。
*   **ngrokアカウント:** ngrokのウェブサイトで無料アカウントを作成してください。
*   **ngrokクライアント:** ローカルPCにngrokクライアントをダウンロードし、PATHを通すか、実行ファイルがあるディレクトリでコマンドを実行できるようにしておいてください。

**手順:**

1.  **ngrokの認証設定 (初回のみ):**
    *   ngrokのダッシュボードにログインし、"Your Authtoken" を見つけます。
    *   ターミナル（コマンドプロンプトやPowerShell）を開き、以下のコマンドを実行してngrokクライアントを認証します。
        ```bash
        ngrok config add-authtoken <YOUR_AUTHTOKEN>
        ```
        `<YOUR_AUTHTOKEN>` は実際のあなたのトークンに置き換えてください。

2.  **Playwrightサーバーのローカル起動:**
    *   ターミナルを開きます。
    *   以下のどちらかのコマンドを実行して、ポート `3003` でPlaywrightサーバーを起動します。（ポート番号は任意ですが、Difyのデフォルトポート3000とは違うものを選んでください）

        *   **npx を使う場合:**
            ```bash
            npx -y playwright@1.51.0 run-server --port 3003 --host 127.0.0.1
            ```
            (`--host 127.0.0.1` を指定することで、ローカルマシンからの接続のみを受け付けるようにし、ngrok経由のアクセスのみを許可します。)
        *   **Docker を使う場合:**
            ```bash
            docker run -p 127.0.0.1:3003:3000 --rm --init -it --workdir /home/pwuser --user pwuser mcr.microsoft.com/playwright:v1.51.0-noble /bin/sh -c "npx -y playwright@1.51.0 run-server --port 3000 --host 0.0.0.0"
            ```
            (Dockerの場合は、コンテナ内では `0.0.0.0` でリッスンさせ、ホスト側では `127.0.0.1:3003` で受けるようにします。)
    *   サーバーが起動し、`Listening on ws://127.0.0.1:3003` のようなメッセージが表示されたら成功です。このターミナルは**開いたまま**にしておきます。

3.  **ngrokでトンネルを作成:**
    *   **別のターミナル**を開きます。（Playwrightサーバーを実行しているターミナルはそのままにしておきます）
    *   以下のコマンドを実行して、ローカルのポート `3003` へのトンネルを作成します。
        ```bash
        ngrok http 3003
        ```
        (PlaywrightサーバーはWebSocket (ws) を使いますが、ngrokの `http` コマンドは通常WebSocketのUpgradeリクエストもトンネリングしてくれます。)
    *   ngrokが起動し、以下のような情報が表示されます。
        ```
        Session Status                online
        Account                       Your Name (Plan: Free)
        Version                       x.x.x
        Region                        United States (us)
        Web Interface                 http://127.0.0.1:4040
        Forwarding                    http://xxxxxxxx.ngrok.io -> http://localhost:3003
        Forwarding                    https://xxxxxxxx.ngrok.io -> http://localhost:3003
        ```
    *   この中の `Forwarding` に表示されている `https://xxxxxxxx.ngrok.io` のような**https**のURLを**コピーまたはメモ**しておきます。これがDifyからアクセスするための公開URLになります。（`xxxxxxx`の部分は毎回ランダムに変わります）
    *   このngrokのターミナルも**開いたまま**にしておきます。

4.  **DifyでPlaywrightプラグインを設定:**
    *   DifyのWeb版にログインします。
    *   「設定」 > 「ツール」 > 「マーケットプレイス」などでPlaywrightプラグインを探し、インストールします。
    *   インストールしたPlaywrightプラグインの「認証を設定」または「設定」ボタンをクリックします。
    *   認証情報の入力欄に、ステップ3でメモしたngrokの**https URLのホスト部分**を使って、`ws://` または `wss://` 形式で入力します。
        *   **試すべき形式:** `wss://<ngrokのURLホスト部分>` (例: `wss://xxxxxxxx.ngrok.io`)
        *   **もし `wss://` でうまくいかない場合:** `ws://<ngrokのURLホスト部分>` (例: `ws://xxxxxxxx.ngrok.io`) も試してください。（ngrokは通常HTTPS(WSS)接続を提供しますが、Difyプラグインがどちらを期待するかによります）
    *   ポート番号はURLに含まれているため、別途入力する必要はありません。
    *   設定を保存します。

5.  **Difyでプラグインを使用:**
    *   AgentのツールとしてPlaywrightプラグインを追加するか、チャットフローでプラグインノードを使います。
    *   プラグインに入力するスクリプト欄に、実行したいPlaywrightスクリプトを入力します。
        *   例: `page = browser.new_page(); page.goto('https://www.google.com'); result = page.title()`
        *   **重要:** 最終的な結果は必ず `result` 変数に代入してください。
    *   Agentに指示を出すか、フローを実行して、プラグインが動作するか確認します。

**注意点:**

*   **ngrokのURL:** ngrokを一度終了して再起動すると、公開URLが変わります。その場合は、Difyのプラグイン設定も新しいURLに更新する必要があります。
*   **接続維持:** Difyからプラグインを使用している間は、ローカルPCで**Playwrightサーバーとngrokの両方を起動し続けておく**必要があります。どちらか一方でも終了すると接続できなくなります。
*   **ngrok無料プランの制限:** 無料プランには接続時間や帯域幅などの制限があります。長時間の利用や頻繁な利用には向かない場合があります。
*   **セキュリティ:** ngrokで公開している間は、そのURLを知っていれば誰でもあなたのローカルのPlaywrightサーバーにアクセスできる状態になります。テスト目的での一時的な利用にとどめ、機密情報を扱うサイトへのアクセスは避けるなど、注意して利用してください。
*   **トラブルシューティング:** うまくいかない場合は、Playwrightサーバーのログ、ngrokのターミナル出力、ブラウザの開発者ツール（Dify実行時）のエラーメッセージなどを確認してください。

これで、DifyのWeb版からローカルPCのPlaywrightサーバーをngrok経由で利用できるはずです。試してみてください。
</details>