Playwrightアプリ簡単作成！ Web-Runner powered by Playwright を作成しました

## Playwrightを使ったWeb自動化をJSONだけで実現する方法

### このツールの使い方は、動画を見た方が分かりやすいと思います。
https://www.youtube.com/watch?v=UM2SeexM5lE

Githubはこちら
https://github.com/sinzy0925/web-runner_powerd_by_playwright


## はじめに
私はPlaywrightを使ったスクレイピングアプリを何本も作ってきましたが、Playwright初心者の方にとっては学習曲線が急なこともありますね。
そこで「日常的に行っているPlaywright操作をもっと簡単に実行できるツールがあれば...」と思い、Web-Runnerを開発しました。

Web-Runnerは、Playwrightの力を借りつつ、JSONだけでブラウザ操作を自動化できるツールです。コードを書かなくても、JSONで指示を与えるだけで、Webの自動操作が可能になります。

## なぜWeb-Runnerを作ったのか？
Playwrightは強力なツールですが、以下のような課題を感じていました：

- 定型的なコードを何度も書くのが面倒
- 初心者には設定の難しさがある
- スクレイピングのためだけに複雑なコードを書くのは非効率
Web-Runnerは、Playwrightの複雑さを隠しながら、その強力な機能を活用できるように設計されています。

## Web-Runnerの特長
1. シンプルなワークフローで高度な自動化を実現
サンプル
```json
{
  "target_url": "https://example.com",
  "actions": [
    {
      "action": "input",
      "selector": "#search",
      "value": "Playwright"
    },
    {
      "action": "click",
      "selector": "button[type='submit']"
    },
    {
      "action": "get_text_content",
      "selector": "h1"
    }
  ]
}
```
たったこれだけのJSONで、Webサイトにアクセス、検索ボックスに入力、ボタンクリック、そして結果の取得ができます！
サンプルは、ダウンロードした、jsonフォルダに入ってます。
```python
python main.py --input duckduckgo2.json --slowmo 1000
```
ですぐに動きます。
（事前インストールも必要です。）

2. 視覚的なJSON生成ツール付き
コマンドを手書きするのも面倒...そんな方のために、付属のjson_generator.htmlを使えば、UIからポチポチと操作するだけでJSONを自動生成できます。

3. 幅広いブラウザ操作をサポート
クリック、テキスト入力、ホバー、ドロップダウン選択、スクロール、要素/ページロード待機、スクリーンショット取得

4. データ抽出も簡単
サンプル
```json
{
  "action": "get_attribute",
  "selector": "a.product-link",
  "attribute": "href"
}
```
テキスト抽出はもちろん、属性の取得も簡単です。さらに、href属性を取得する際は自動的に相対URLを絶対URLに変換してくれます。

5. iframeも自動対応
iframe内の要素操作が必要な場合も、Web-Runnerは自動的にiframeスコープを検出。多くの場合、特別な命令なしでネストされたフレーム内の要素も操作できます。

6. PDF内のテキスト抽出も対応
PDFリンクを検出すると、自動的にファイルをダウンロードしてテキスト抽出を行います。Web上のPDFデータも簡単に取得可能です。

7. 非同期処理でスピーディな実行
asyncioを使用して構築されているため、ネットワーク操作やPDFダウンロードなどを効率的に並行処理します。

8. デバッグも簡単
詳細なログを提供し、エラー発生時には自動的にスクリーンショットを保存するため、問題解決が容易です。

## こんな方におすすめ
- Webスクレイピングを始めたいけど、コードを書くのが苦手な方
- 定型的なブラウザ操作を自動化したいエンジニア
- PDFを含むWebデータから情報を収集したいデータアナリスト
- QAテストを効率化したいテストエンジニア
- Playwrightを使いたいけど学習コストを抑えたい方

## 使い方
インストール方法
リポジトリのクローン
```bash
git clone https://github.com/sinzy0925/web-runner_powerd_by_playwright.git
cd web-runner_powerd_by_playwright
```

## 依存ライブラリのインストール
```bash
pip install -r requirements.txt
```
### もしくは直接インストール
```bash
pip install playwright PyMuPDF
```

## Playwrightのブラウザをインストール
```bash
playwright install
```

## 実行方法
JSONファイルを作成（またはjson_generator.htmlを使用）
以下のコマンドで実行
```bash
python main.py --input input.json
```

### オプション：
--headless: ブラウザを表示せずに実行
--slowmo 500: 動作確認用。実行速度を遅く（ミリ秒指定）

## 実際の使用例
例えば、Qiitaのトレンド記事を取得するタスクは以下のようになります：
使える例です。
```json
{
  "target_url": "https://qiita.com/",
  "actions": [
    {
      "action": "get_all_text_contents",
      "selector": "article h2 a"
    }
  ]
}
```
これだけで、Qiitaのトレンド記事タイトルが取得できます。
githubに、qiita.jsonがありますので、
```bash
python main.py --input qiita.json --slowmo 1000
```
で実行してみてください。
終わると、main.pyと同じディレクトリに、output_results.txt　と　output_web_runner.log　ができるので、ご確認ください。

## まとめ
Web-Runnerは、Playwrightの強力な機能をJSONという簡単なインターフェースで利用できるようにした、Web自動化のためのツールです。コードを書く必要がなく、JSON設定ファイルだけでブラウザ操作を自動化できるため、プログラミングの知識が少ない方でも利用しやすくなっています。

### ぜひお試しいただき、フィードバックをいただければ幸いです。また、このツールがPlaywrightの普及の一助となり、より多くの人がWeb自動化の恩恵を受けられることを願っています。

### 依存関係
Playwright
PyMuPDF (fitz)

### ライセンス
このプロジェクトはMITライセンスの下で提供されています。詳細はLICENSEファイルをご覧ください。


足りない機能や、バグもたくさんありそうです。
いろいろ教えてください。

この記事が皆さんのWeb自動化作業の助けになれば嬉しいです。質問やフィードバックがあれば、コメントでお知らせください！