ken_nogi/Pleasanter/.claude/skills/pleasanter-selenium-html-scrape/SKILL.md
Kenichiro NOGI ce58cb4be4 初回コミット: dev配下(NodeSrv/Pleasanter等)をGitea管理下に統合
GitHub(nextgroup2706/ken_nogi)は今後使わず自社Gitea運用に切替え。
NodeSrvは旧リポジトリの履歴を破棄しファイルのみ統合(Dokploy用サービスアカウントは
別途mygit-admin/NodeSrv.gitに履歴あり)。notepmエクスポート(12GB)とPleasanter
インストーラzip(208MB)はサイズが大きいため.gitignoreで除外。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-04 15:37:06 +09:00

96 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
name: pleasanter-selenium-html-scrape
description: プリザンター画面をSeleniumでログイン→Ajax描画完了後のHTMLpage_source取得するツール。API専用エンドポイント/api/items/get等ではなく、通常ブラウザが受け取る「生WEBレスポンス」丸ごと欲しい場合、一覧画面のグリッドデータがAjaxで後読みされ静的HTMLだけでは枠しか取れない場合に使う。「Seleniumで取得」「描画後HTML」「レンダリング済みHTML」「ブラウザ相当のレスポンス」「JS実行後のDOM」等の依頼で使用。現状は開発検証専用対象: nextoffice2.next-hd.net、他ホスト・本番環境への適用は都度ユーザー確認要。
---
# プリザンター 描画後HTML取得Selenium
## コレ何
`.claude/js/get-page-html.js`fetch+Cookie方式は静的HTMLしか取れん。一覧画面はAjaxでグリッドデータ後読み→枠だけ返る。
本ツールはSeleniumで実ブラウザ動かし、ログイン→対象URL遷移→Ajax描画完了待ち→`page_source`取得。JS実行後の完全DOM手に入る。
## 使う場面
- 一覧画面グリッドの実データ込みHTML欲しい時
- 静的HTML取得get-page-html.jsで枠しか取れず困った時
- ブラウザDevTools相当の最終レンダリング結果をプログラムから欲しい時
該当しない場合生JSON・サイト設定欲しいだけ等は`pleasanter-site-spec`スキル側の`get-site-config.js`使う方が適切。
## 現状の許可範囲(厳守)
開発検証用ホスト `nextoffice2.next-hd.net`SiteId 488755、レコード例: items/488775のみ動作確認済み・許可対象。
他ホスト(本番`nextoffice.next-hd.co.jp`等)・他サイトへの適用は、都度ユーザーへ明示確認取ってから行う。
## 事前準備
```
pip install selenium
```
Chrome または Edge インストール済み前提Selenium 4.6+のSelenium Managerがdriver自動解決、手動ダウンロード不要
認証情報は環境変数で渡すか、スキル直下の`.env`ファイル(`.env.example`を複製し値を埋める。
`.gitignore`で除外済み、環境変数が優先)に記載する。**チャットに平文で書かない**。
```
export PLEASANTER_LOGIN_ID='...'
export PLEASANTER_LOGIN_PASSWORD='...'
```
## 使い方
```
python .claude/skills/pleasanter-selenium-html-scrape/scripts/scrape_rendered_html.py <URL> [オプション]
```
| オプション | 内容 |
|---|---|
| `--output` / `-o` | HTML保存先ファイルパス。省略時は標準出力へ先頭2000文字のみ表示 |
| `--screenshot` | フルページスクリーンショット保存先PNG。指定時のみ撮影。headless時、ページ全体の高さに合わせてウィンドウを広げてから撮影する |
| `--wait-selector` | 描画完了待ちCSSセレクタ。既定`#Editor, .grid-container`(編集画面/一覧画面両対応) |
| `--headless` | ヘッドレスモード実行 |
| `--timeout` | 待機タイムアウト秒既定15 |
| `--action` | 描画待ち後に実行する操作。`click:SELECTOR` / `type:SELECTOR:TEXT` / `blur:SELECTOR` / `wait:SECONDS`。複数回指定可、指定した順に実行タブ切替・フィールド入力→blurでchangeイベント発火、等 |
488775の編集画面取得、HTML+スクリーンショット両方):
```
python .claude/skills/pleasanter-selenium-html-scrape/scripts/scrape_rendered_html.py \
"https://nextoffice2.next-hd.net/pleasanter/items/488775" --headless -o result.html --screenshot result.png
```
例(タブ切替→フィールド入力→別タブへ戻ってスクリーンショット):
```
python .claude/skills/pleasanter-selenium-html-scrape/scripts/scrape_rendered_html.py \
"https://nextoffice2.next-hd.net/pleasanter/items/488775" --headless \
--action 'click:li[aria-controls="FieldSetTab1"]' \
--action 'type:#Results_Class029:東京都渋谷区渋谷1-1-1' \
--action 'blur:#Results_Class029' \
--action 'click:li[aria-controls="FieldSetGeneral"]' \
--action 'wait:1' \
--screenshot after_action.png
```
一覧画面(`/items/{SiteId}/index`)等、既定セレクタで拾えない画面種別は`--wait-selector`で
その画面固有の要素グリッドや特定フィールドのid/classを指定する。不明なら一旦`--output`無しで
実行し先頭2000文字確認→必要ならタイムアウト内で該当要素のid/class調べ直す。
## 保存先の扱い
出力ファイルは実データ業務レコード内容含み得るためGit管理対象外にすること。
本スキルの`scripts/*.html`はリポジトリ`.gitignore`で除外済み。他フォルダへ保存する場合も
Git追跡対象に含めない`configs/`配下等、既存の除外ルール活用)。
## ログインフォームの実装メモ(実機確認済み)
- ログインID/PW入力欄: `#Users_LoginId` / `#Users_Password`
- ログインボタン`#Login`はフッターリンク等と重なりclick()が`ElementClickInterceptedException`で弾かれる実績あり。
本ツールはフォームの`data-enter="#Login"`仕様に沿い、パスワード欄へEnterキー送信でsubmitしているクリックしない
同種のブラウザ自動化を新規に書く場合も同じ罠に注意。
## 動作確認済み実績
2026-08-30、`https://nextoffice2.next-hd.net/pleasanter/items/488775`(編集画面)にて
ログイン→`#Editor`描画待ち→`page_source`取得約310万文字成功確認済み。