目次
🎯 目的・やりたいこと
- 毎朝8:30に自動実行(Windowsタスクスケジューラ)
- 5社の「新製品」ページをクロール
- 見出し+公開日を抽出(セレクタ耐性強化済み)
- 過去に通知済みかどうかを
seen_items.xlsxで判定 - 初検知の新色のみをSlackに通知(API未使用)
💡 自動化で得られるメリット
| 手作業 | 自動化後 |
|---|---|
| サイト巡回 | 1クリック or 時間指定でOK |
| 公開日チェック | 自動で差分だけ検出 |
| Slackに投稿 | 自動で投稿フォームに貼り付け |
📁 フォルダ構成・必要ファイル
NewColorNotifier/
├─ main_flow.padx ← メインフロー
├─ modules/
│ ├─ CrawlSiteA.padx
│ ├─ CrawlSiteB.padx
│ ├─ CrawlSiteC.padx
│ ├─ CrawlSiteD.padx
│ ├─ CrawlSiteE.padx
│ └─ PostToSlack.padx
├─ data/
│ ├─ seen_items.xlsx ← 永続既読リスト
├─ docs/
│ └─ README.pdf
📄 seen_items.xlsx 構成例
| サイト名 | タイトル | 公開日 |
|---|---|---|
| SiteA | 「プレミアムレッド」登場! | 2025/09/10 |
| SiteB | グレージュ新色リリース | 2025/09/09 |
※通知済みデータをここに記録することで、差分のみ通知できます。
⏰ スケジュール実行(8:30自動起動)
Windows タスクスケジューラに以下を登録:
- トリガー:毎日 8:30
- アクション:
Power Automate Desktop → main_flow.padx
🧠 フローの処理構成(概要図)
[1] seen_items.xlsx 読み込み
↓
[2] 各メーカーサイトをクロール(5社分)
↓
[3] 公開日+見出しを抽出
↓
[4] seen_items と照合 → 新規アイテムだけ抽出
↓
[5] Slack Web投稿画面に貼り付け
↓
[6] seen_items.xlsx に新規を追記保存
🔧 Power Automate Desktop フロー作成手順(完全ガイド)
✅ STEP1:既読リスト読み込み(seen_items.xlsx)
アクション:
- 「Excelワークシートからデータを読み取る(閉じたブック)」
- パス:
data/seen_items.xlsx - 出力:
SeenList
変数名:SeenList(リスト)
🔁 STEP2:5社分のサイトクロール(モジュール分離)
各サイトごとにセレクタや構造が異なるため、以下のようにモジュールごとにクロール処理を分けます:
| サイト | サブフロー名 | 特徴 |
|---|---|---|
| SiteA | CrawlSiteA.padx | CSSセレクタ固定 |
| SiteB | CrawlSiteB.padx | ARIAセレクタ+近傍テキスト抽出 |
| SiteC | CrawlSiteC.padx | UIが画像ベース→画像近傍クリック必要 |
| SiteD | CrawlSiteD.padx | 日付が別DOM |
| SiteE | CrawlSiteE.padx | 検索ページ形式 |
各サブフローで出力する内容:
NewItemsList(リスト形式)
[
{"サイト名": "SiteA", "タイトル": "●●新色登場", "公開日": "2025/09/11"},
...
]
🧠 STEP3:差分判定(未通知リスト抽出)
アクション:
- 「リストをフィルタリング」
条件:
NewItem["タイトル"] + NewItem["公開日"]
が SeenList に存在しない → 通知対象
出力:ItemsToNotify(リスト)
🧾 STEP4:Slack投稿用メッセージ作成
アクション:
- 「リストを繰り返し処理(For Each)」
- 文字列連結して以下のようなメッセージを生成:
【SiteA】
●●新色登場(2025/09/11)
【SiteC】
グレーシルバー新製品!(2025/09/11)
→ 変数:SlackMessage
💬 STEP5:Slack Web投稿(PostToSlack.padx)
方法:APIは使わず、Slackの投稿フォームに貼り付けて送信
- SlackチャンネルのWeb版を開く(https://app.slack.com)
- 該当チャンネルに遷移(URL直打ち可)
- テキストエリアをUI要素で取得
SlackMessageを貼り付け+Enterキー送信
補足:ブラウザのセッションが必要なので、最初は手動ログインしておくこと
📥 STEP6:新しい通知内容を seen_items.xlsx に追記
アクション:
- ループ:
ItemsToNotify - 「Excelファイルに行を追加」
列:サイト名/タイトル/公開日
ファイル:seen_items.xlsx
🧩 セレクタ設計Tips(耐障害性向上)
| パターン | 対応方法 |
|---|---|
| CSSセレクタ固定 | class, id, nth-childを明示 |
| ARIAセレクタ | aria-label, role="heading" など |
| 画像近傍クリック | 「画像を検出」+「画像の右隣をクリック」 |
| DOM変動 | 「要素が見つからないとき」→画像クリックへ分岐 |
📋 ログ・実行履歴の保存(任意)
- 通知した内容も別ファイル(
notified_log.csv)に保存しておくと後で便利
日時,サイト名,タイトル,公開日
2025/09/11,SiteA,●●新色登場,2025/09/11
⚠️ エラーハンドリング設計
| エラー内容 | 対応方法 |
|---|---|
| ページが開けない | Try-Catchでリトライまたはスキップ |
| Slack投稿失敗 | メッセージ表示+フロー継続 |
| セレクタで要素が取れない | セレクタ2系統でFallback対応 |
| seen_items.xlsxが開かれている | エラーメッセージ表示+ユーザーに手動対応を促す |
✋ 実装のテスト方法
seen_items.xlsxを空にして仮のテストデータだけ入れて実行- Slackに投稿されるかを確認
- 再度実行して差分通知が除外されるかチェック
- 新しいアイテムを手動で追加して、差分がまた通知されるかを確認
❓ よくある質問(FAQ)
Q1. APIを使わない理由は?
A. Slack APIのトークン取得や権限設定が不要なため、Web投稿なら社内で試しやすい・導入が楽です。
Q2. 投稿メッセージの文面を変更したい
A. PAD内の変数SlackMessageの生成部分を編集すればOKです。テンプレファイルを読み込んでもOK。
Q3. セレクタがうまく取れない
A. 画像認識との併用をおすすめします。スクロール+画像の右隣クリックでほぼ対応可能です。
Q4. どのタイミングで既読データを保存してる?
A. 通知送信後、正常終了したアイテムのみ seen_items.xlsx に追記しています。
Q5. タスクスケジューラが動かない場合は?
A. 「ログオン時に実行」「最上位の特権で実行」など設定を確認してください。
また、PADがバックグラウンドで実行可能なように構成してください。
