目次
🎯 目的
楽天・Yahoo!のBtoB管理画面に毎日ログインし、注文CSVをダウンロード → 整形 → orders_std.csvとして統合出力。
ファイル名やレイアウトの違いを吸収し、1つの共通形式に整えることで、下流の在庫処理や売上集計へつなげます。
🔄 自動化する処理の全体像
[1] accounts.csv 読み込み(楽天 / Yahoo!)
↓
[2] 各アカウントに対して処理
├─ サイトにログイン(ID・PW)
├─ 期間指定でCSVをDL
├─ ファイル名を監視・ダウンロード完了を検知
├─ ダウンロードしたCSVを整形(カラム統一)
├─ 共通形式に追記(orders_std.csv)
└─ エラー時はスクショ保存し、次へ継続
↓
[3] 完了
📁 ファイル構成(フォルダ構造)
OrderDownloaderBot/
├─ main_flow.padx ← メインフロー
├─ modules/
│ ├─ LoginAndDownloadCSV.padx ← 管理画面ログイン+CSV抽出
│ ├─ NormalizeCSV.padx ← フォーマット整形処理
│ └─ WriteErrorLog.padx ← エラー対応(スクショ保存など)
├─ data/
│ ├─ accounts.csv ← ログイン情報
│ ├─ orders_std.csv ← 出力ファイル(共通形式)
├─ download/
│ └─ (サイトごとのCSVがDLされる)
├─ screenshots/
│ └─ (エラー発生時のスクリーンショット)
├─ config.json ← タイムアウト、監視設定など
📄 ファイル詳細
accounts.csv
サイト名,ログインURL,ユーザーID,パスワード,CSV検索URL
楽天,https://b2b.rakuten.co.jp/login,admin_r,pass_r,https://b2b.rakuten.co.jp/orders
Yahoo,https://b2b.yahoo.co.jp/login,admin_y,pass_y,https://b2b.yahoo.co.jp/orders
config.json
{
"downloadFolder": "C:\\Users\\User\\Downloads\\orders\\",
"downloadTimeout": 60,
"fileStableSeconds": 3
}
orders_std.csv(出力形式)
| サイト名 | 注文番号 | 注文日 | 顧客名 | 金額 |
|---|
※ 楽天/Yahoo!で元データの列が異なっていても、ここでは統一形式で追記。
🛠 PAD フロー構築手順(初心者向けに完全ガイド)
✅ STEP1:accounts.csvの読み込み
アクション:
- 「CSVファイルを読み取る」→
accounts.csv - 変数:
AccountsList
🔁 STEP2:サイトごとにループ処理
アクション:For Each
対象:%AccountsList%
現在の項目:CurrentAccount
🧭 STEP3:ログイン+CSVダウンロード(LoginAndDownloadCSV.padx)
引数:
- ログインURL
- ユーザーID・パスワード
- 検索画面URL
- ダウンロード保存先(
config.json読み込み)
処理:
- Chrome起動(–profile-directory でも可)
- ログインフォームにID/PWを入力
- 検索画面へ遷移
- 期間条件を入力(例:当日 or 前日)
- 「CSVダウンロード」ボタン押下
- ファイルダウンロードを監視(後述)
📥 STEP4:ダウンロード完了の監視処理
方法:
- ダウンロードフォルダを監視(ワイルドカード)
- 新しいファイルができたらファイルサイズが一定時間変化しないか確認
実装例:
アクション:フォルダー内のファイル一覧を取得
条件:%ファイル名に"order"含む && 拡張子=".csv"%
→ その後「ファイルサイズ監視ループ」:
3秒ごとにサイズを比較 → 一定なら完了
タイムアウト:
config.json内の "downloadTimeout" 秒で制限。
📉 STEP5:CSVを共通形式へ整形(NormalizeCSV.padx)
引数:
- ダウンロードしたファイルパス
- サイト名(楽天 or Yahoo)
処理:
- 元CSVファイルを読み込み
- サイト別にカラムマッピング
- 楽天:
注文番号列 = col1/金額列 = col4… - Yahoo:
注文番号列 = colA/金額列 = colC…
- 楽天:
- 必要項目だけ抽出
orders_std.csvに追記
🧾 STEP6:共通形式(orders_std.csv)に追記
出力形式:
サイト名,注文番号,注文日,顧客名,金額
楽天,123456,2025/09/11,田中商事,12000
Yahoo,ABC999,2025/09/10,合同会社XYZ,8000
アクション:
- ファイルが存在しない場合はヘッダー付きで新規作成
- 存在する場合はデータのみ追記
❌ STEP7:エラー処理とスクリーンショット(WriteErrorLog.padx)
エラー検知:
- Try-Catchで囲む
Login失敗,CSVボタン押下不可,DL失敗,変換エラーなどでキャッチ
処理内容:
screenshots/サイト名_YYYYMMDD_HHMMSS.pngとしてスクリーンショットを保存- 次のサイトにスキップして処理継続
アクション:画面のスクリーンショットを取得 → 保存
変数:%CurrentAccount["サイト名"]% + 日時
⚠️ エラーハンドリング設計まとめ
| エラー内容 | 対処法 |
|---|---|
| ログインできない | スクショ保存+ログ出力してスキップ |
| CSVボタンが押せない | 画面構造変更想定 → Try-Catch |
| DLされない/時間切れ | ファイル監視タイムアウト → 次へ |
| 整形失敗 | 書式変更対応 → サイトごとに分岐処理 |
📋 テスト&検証手順
accounts.csvを1件だけ設定して実行- CSVがDLされるか?
- DL完了を待機できるか?
orders_std.csvに統一形式で追記されるか?- わざとログイン情報を間違えて、スクショ保存されるか?
✨ 応用Tips
🔄 Chromeプロファイルによるセッション保存
- 2段階認証やログイン維持に便利
- 起動時に以下を使用:
chrome.exe --profile-directory="Profile 1"
🧹 古いDLファイルの自動削除
- フローの最初に
download/フォルダをクリアしておくと処理がスッキリ
📅 処理日を動的に指定
- 「昨日の日付」などを取得し、検索条件入力に活用
アクション:日時を取得 → 書式:yyyy/MM/dd
❓ よくある質問(FAQ)
Q1. サイトごとのCSV形式が違っても大丈夫?
A. サイト別に整形ロジックを分けて実装しているため問題ありません。
Q2. ファイル名が毎回変わるけど大丈夫?
A. ワイルドカード+ダウンロード日時チェックで、常に最新のCSVを取得するようにしています。
Q3. エラーで処理が止まらない?
A. Try-Catchで囲んでおり、エラーが起きてもスクリーンショットを残して処理を継続します。
Q4. 毎日自動で起動できますか?
A. Windowsのタスクスケジューラを使えば、毎朝8:00など時間指定でPADフローを自動起動できます。
