Power Automate Desktopで求人サイトを自動スクレイピング→条件マッチでメール通知する方法

  • URLをコピーしました!
目次

🎯 目的

  • 求人サイト2社の検索結果をスクレイピング
  • 「勤務地=東京」「リモート可」などの条件に一致する求人のみ抽出
  • 一致求人があれば、管理者にメール通知(本文にタイトル+URL一覧)
  • 処理ログをCSVに記録(日時/件数/対象サイト)

🔄 自動化の全体フロー

[1] サイトA / B の検索ページを自動操作
 ↓
[2] 結果ページから求人タイトル・URLを抽出
 ↓
[3] 条件に一致する求人だけをフィルタ
 ↓
[4] 一致リストがあればメールで通知
 ↓
[5] ログファイルに処理記録を追記

📁 フォルダ構成(推奨)

JobScraperBot/
├─ main_flow.padx
├─ modules/
│   ├─ ScrapeSiteA.padx
│   ├─ ScrapeSiteB.padx
│   ├─ FilterJobs.padx
│   ├─ SendEmail.padx
│   └─ WriteLog.padx
├─ data/
│   ├─ config.json              ← 条件設定
│   ├─ log.csv                  ← 処理ログ
├─ templates/
│   └─ email_template.txt       ← メール本文テンプレ

📄 ファイル詳細


config.json

{
  "keywords": ["東京", "リモート", "在宅"],
  "emailTo": "admin@example.com",
  "siteA_url": "https://example.com/jobs/search",
  "siteB_url": "https://example2.com/search"
}

log.csv(実行履歴)

日時,対象サイト,取得件数,一致件数
2025/09/11 08:30,SiteA,30,5
2025/09/11 08:30,SiteB,25,2

email_template.txt

以下の条件に一致する求人が見つかりました({{サイト名}}):

{{一致リスト}}

ご確認ください。

🛠 フロー構築ステップ(初心者でも安心)


✅ STEP1:求人サイトから検索結果を取得(ScrapeSiteA / ScrapeSiteB)


アクションの概要:

  1. Chromeを起動(プロファイル指定でログイン維持も可)
  2. 検索欄に「キーワード(例:エンジニア)」を入力
  3. 「検索」ボタンを押す
  4. 結果リストをループで取得 → Title + URL をリストで出力

UIセレクタ例(サイトによって変更):

項目セレクタ例
検索入力欄input[name="q"]
検索ボタンbutton[type="submit"]
タイトルdiv.job-card h2.title
詳細リンクa[href*="/job/"](同一ノード内で取得)

出力:

[
  {"title": "Webエンジニア|東京勤務(リモート可)", "url": "https://example.com/job/123"},
  {"title": "インフラエンジニア|大阪", "url": "https://example.com/job/456"}
]

変数名:JobList_SiteA / JobList_SiteB


🧠 STEP2:条件で求人をフィルタ(FilterJobs.padx)

処理内容:

  • 各サイトの JobList をループ
  • config["keywords"] に1つでも含まれていれば「一致」と判定

実装ポイント:

ループ:各Job
条件:Job["title"] に "東京" or "リモート" or "在宅" を含むか?
→ 一致リストに追加

出力:

FilteredJobs_SiteA(リスト)
FilteredJobs_SiteB(リスト)

✉️ STEP3:一致求人をメール送信(SendEmail.padx)

条件:

  • 一致リストが1件以上ある場合に実行

メール本文生成:

  1. email_template.txt を読み込む
  2. {{サイト名}}SiteA / SiteB に置換
  3. {{一致リスト}} → タイトルとURLを箇条書きで整形
📌 Webエンジニア|東京勤務(リモート可)
https://example.com/job/123

📌 フロントエンド|東京・在宅OK
https://example.com/job/234

アクション:

  • 「Outlookメールを送信」
    • 宛先:config["emailTo"]
    • 件名:「求人アラート|{{サイト名}}」
    • 本文:上記生成テキスト
    • 送信元:既定のOutlookアカウント

🧾 STEP4:ログ出力(WriteLog.padx)

アクション:

  • 日時:Now
  • サイト名:SiteA / SiteB
  • 総取得数:length(JobList)
  • 一致数:length(FilteredJobs)

書き出し先:

log.csv(追記モード)

📋 実行の流れ(main_flow.padx)

[1] config.json 読み込み
[2] ScrapeSiteA → FilterJobs → SendEmail → WriteLog
[3] ScrapeSiteB → FilterJobs → SendEmail → WriteLog

🧪 テスト手順

  1. config.json に「東京」「リモート」などのキーワードを設定
  2. テスト用の求人が出るワード(例:「エンジニア」)を入力
  3. フロー実行
  4. メールが届くか確認
  5. log.csv に記録されているか確認

✨ 応用Tips

応用内容実装アイデア
件名に一致件数を入れる件名 → 求人アラート(5件ヒット) のように動的生成
メールの代わりにSlack通知Slack Web送信 or APIに置き換え可能(別記事参照)
処理時間の記録処理開始〜終了をタイムスタンプでログ記録
結果をExcelで保存FilteredJobs結果一覧.xlsx に出力可能

❓ よくある質問(FAQ)


Q1. スクレイピングがブロックされない?

A. 正規のブラウザ操作+セレクタによるDOM取得のため、人が操作しているのと同じ扱いになります。
頻度が高すぎると弾かれる可能性はあるため、時間帯分散や待機を挟むのがおすすめです。


Q2. 検索条件は変えられる?

A. 検索フォームに入力する値を外部ファイル(config.jsonなど)で管理すれば、自由に差し替え可能です。


Q3. メール送信にGmailは使えない?

A. Power Automate DesktopではOutlookの使用が最も安定しています。Gmailは送信にOAuthやSMTP設定が必要で手間です。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

目次