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

5.6 KiB
Raw Blame History

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.jsfetch+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.netSiteId 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万文字成功確認済み。