PowerAutomateDesktopで勤怠システムへのログイン&打刻確認 → Slack通知を自動化する方法

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

目的

  • 毎朝8:55に自動起動(Windowsタスクスケジューラ)
  • 勤怠システムにログインし、出勤打刻が済んでいるか確認
  • 打刻されていない場合は、Slackに通知を自動送信
  • API未使用。全てブラウザ操作ベースの構成

📁 フォルダ構成(推奨)

KintaiCheckerBot/
├─ main_flow.padx
├─ modules/
│   ├─ LoginKintai.padx          ← ログイン処理
│   ├─ CheckStampStatus.padx     ← 打刻判定
│   ├─ NotifySlack.padx          ← Slack通知処理
├─ data/
│   ├─ config.json                ← 勤怠URLやSlack情報など
│   └─ log.csv                    ← 判定ログ

🕒 スケジュール設定

❱ タスクスケジューラ(Windows)で設定

項目設定内容
トリガー毎日 8:55
アクションPower Automate Desktop で main_flow.padx を実行
実行権限「最上位の特権で実行」にチェック

📄 config.json(例)

{
  "kintaiUrl": "https://example.com/kintai/login",
  "userEmail": "your.email@example.com",
  "slackUrl": "https://slack.com/app_redirect?channel=your_channel",
  "slackMessageTemplate": "【勤怠未打刻通知】%TIME% 時点で未打刻です。ご確認ください。",
  "timeoutSeconds": 30
}

✅ 処理の全体フロー

[1] Chrome起動 → 勤怠システムへログイン(LoginKintai)
 ↓
[2] ダッシュボードから打刻状態を判定(CheckStampStatus)
 ↓
[3] 未打刻ならSlackに通知を送信(NotifySlack)
 ↓
[4] 処理結果をlog.csvに記録

🛠 フロー構築手順(ステップバイステップ)


✅ STEP1:Chrome起動 & 勤怠システムへログイン(LoginKintai.padx)

アクション構成:

  1. ブラウザ起動
    • Chrome起動:ユーザープロファイル指定でログイン維持
    • URL指定:https://example.com/kintai/login
  2. ログインフォーム操作
    • メールアドレス/パスワード入力(※パスワードは資格情報マネージャに登録)
    • 「ログイン」ボタンをクリック

セレクタ例:

項目セレクタ例
メール入力欄input[name="email"]
パスワード欄input[type="password"]
ログインbutton[aria-label="ログイン"]

補足: 2段階認証がある場合は、処理を一時停止して「手動操作待ち」にする対応も可能です。


✅ STEP2:打刻状況をチェック(CheckStampStatus.padx)

判定対象:

  • 勤怠システムのダッシュボードにある「出勤済み」or「未打刻」などの表示テキスト

判定方法:

  • 出勤済み などのDOM要素が存在するかをチェック
  • または、innerText"出勤打刻済み" などが含まれるかを文字列検索

PADアクション例:

  • Webページ上のUI要素が存在するか確認(存在しない=未打刻)
  • テキストを取得して条件判定

判定結果:

  • フラグ:IsStamped → True or False

✅ STEP3:Slack通知を送信(NotifySlack.padx)

Slack送信方法(API不使用):

  1. ChromeでSlackのWeb版(チャンネルURL)を開く
  2. テキスト入力欄にテンプレメッセージを入力
  3. Enter キーで送信

メッセージ構成:

【勤怠未打刻通知】2025/09/11 08:55 時点で未打刻です。ご確認ください。

config.json のテンプレートで %TIME% を現在時刻に置換

UI操作:

  • Slackのメッセージ入力欄が contenteditable=true のDIVである場合が多い
  • セレクタが不安定な場合は座標クリック+Ctrl+Vで代替可能

✅ STEP4:処理ログを保存(log.csv)

出力内容(1行ごとに追記):

実行時刻打刻状況Slack通知備考
2025/09/11 08:55未打刻通知済み正常完了
2025/09/10 08:55出勤済みなし

保存先:data/log.csv


💡 応用Tips

応用実装案
土日実行除外曜日チェック(Now() で Today の DayOfWeek 判定)
通知先を切替ユーザーごとの Slack URL をCSV管理可能
毎週まとめて報告ログを元に毎週月曜に集計&一括通知も可能
LINE通知に拡張LINE公式アカウントのWeb画面に貼付けで対応可能

✅ 練習ポイントまとめ

学習要素習得できるスキル
✅ スケジュール起動タスクスケジューラ連携(定時実行)
✅ ログイン処理UI入力・セレクタの安定取得
✅ DOM判定処理テキスト or 要素の有無による条件分岐
✅ Slack通知(Web)Webアプリ間コピペ+送信の自動化
✅ ログ出力CSVへ結果追記で再現性・記録性を確保

❓ よくある質問(FAQ)


Q1. 勤怠システムのUIが変更されたら?

A. DOMのセレクタが崩れると判定失敗しますが、「ラベル名のテキスト取得」による柔軟な判定構成を推奨します。
また、セレクタが取得できない場合は画像マッチングや座標クリックも併用可能です。


Q2. Slackへの投稿がうまくいかない

A. Web版Slackでログイン状態を保持しておくと安定します。
入力欄のセレクタが取りづらい場合、「TAB→Ctrl+V→Enter」方式で送信が可能です。


Q3. 出勤済みでも通知してしまう場合は?

A. 判定条件があいまいな可能性があります。
以下のような**「完全一致 or 含む」ルール**で対応してください。

If "出勤打刻済み" in 要素のテキスト → 出勤済み
Else → 未打刻
よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

目次