Claude Code x Python でRPA・ブラウザ操作・業務自動化を完全実現する完全ガイド

Claude Code + pyautogui/Playwrightで画面操作・Web収集・ファイル処理のRPAを構築。UiPath不要でPythonだけでRPAを実現する実践ガイド。ノーコードの10倍柔軟な自動化が可能。

この記事をシェア:
目次 クリックで開く

2026年4月 | Python RPA | 業務自動化・ブラウザ操作

Claude CodeのPython RPAで自動化された業務フロー

▲ Claude Codeが実際に生成した実行結果

毎日の定型Web作業がPythonスクリプト1本で動くようになった

業務改善担当の川田です。毎朝、複数の社内システムにログインしてデータをコピーしてExcelに貼り付ける作業に1時間かかっていました。Claude CodeでPlaywright + pyautoguiのRPAスクリプトを作成し、完全自動化しました。

この記事で実現すること

✅ Playwrightでブラウザ操作を自動化
✅ pyautoguiでデスクトップアプリを制御
✅ Webスクレイピングでデータ自動収集
✅ 複数システムをまたがる業務を自動化
✅ タスクスケジューラーで毎日自動実行

STEP 1:Playwrightで社内システムへの自動ログインを実装する

毎日の社内システムへのログイン・データ取得を自動化します。

💬 私はClaude Codeにこう頼みました:社内の受注管理システム(Webシステム)に自動ログインして
当日の受注データを取得してCSVに保存するPlaywrightスクリプトを作ってください。
🤖 Claude Codeの回答:Playwrightで受注管理システムの自動ログインとデータ取得を実装しました。
from playwright.sync_api import sync_playwright
import csv, os
from datetime import date

SYSTEM_URL = "https://order-system.company.com"
USERNAME   = os.environ.get("SYSTEM_USER", "admin")
PASSWORD   = os.environ.get("SYSTEM_PASS", "password")

def scrape_daily_orders():
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True)
        ctx  = browser.new_context(viewport={"width": 1280, "height": 900})
        page = ctx.new_page()
        
        # ログイン
        page.goto(f"{SYSTEM_URL}/login")
        page.fill("#username", USERNAME)
        page.fill("#password", PASSWORD)
        page.click("#login-btn")
        page.wait_for_load_state("networkidle")
        print("ログイン完了")
        
        # 当日の受注一覧に移動
        today_str = date.today().strftime("%Y/%m/%d")
        page.goto(f"{SYSTEM_URL}/orders")
        page.fill("#date-from", today_str)
        page.fill("#date-to",   today_str)
        page.click("#search-btn")
        page.wait_for_selector(".order-table", timeout=10000)
        
        # テーブルデータを抽出
        rows = page.query_selector_all(".order-table tbody tr")
        orders = []
        for row in rows:
            cells = row.query_selector_all("td")
            if len(cells) >= 5:
                orders.append({
                    "受注番号": cells[0].inner_text(),
                    "顧客名":   cells[1].inner_text(),
                    "商品":     cells[2].inner_text(),
                    "数量":     cells[3].inner_text(),
                    "金額":     cells[4].inner_text(),
                })
        
        browser.close()
        
        # CSVに保存
        csv_path = f"orders_{date.today():%Y%m%d}.csv"
        with open(csv_path, "w", newline="", encoding="utf-8-sig") as f:
            writer = csv.DictWriter(f, fieldnames=["受注番号","顧客名","商品","数量","金額"])
            writer.writeheader(); writer.writerows(orders)
        
        print(f"受注データ取得完了: {len(orders)}件 → {csv_path}")
        return orders

orders = scrape_daily_orders()
✅ 実行結果

社内受注管理システムに自動ログインし、当日の受注データ87件が自動で取得されてCSVに保存されました。手動作業が完全に不要になりました。

実行結果

STEP 2:複数サイトのデータを自動収集して統合する

複数の社内・外部システムからデータを自動収集して一つにまとめます。

💬 私はClaude Codeにこう頼みました:受注管理・在庫管理・配送状況の3システムからデータを並行取得して
統合レポートを自動生成するスクリプトを作ってください。
🤖 Claude Codeの回答:asyncio + Playwright で複数システムの並行取得を実装しました。
import asyncio
from playwright.async_api import async_playwright
import pandas as pd

async def scrape_system(url, username, password, table_selector, headless=True):
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=headless)
        page    = await browser.new_page()
        await page.goto(url)
        await page.fill("#username", username)
        await page.fill("#password", password)
        await page.click("#login-btn")
        await page.wait_for_load_state("networkidle")
        await page.goto(f"{url}/data/today")
        await page.wait_for_selector(table_selector)
        rows = await page.query_selector_all(f"{table_selector} tbody tr")
        data = []
        for row in rows:
            cells = await row.query_selector_all("td")
            data.append([await c.inner_text() for c in cells])
        await browser.close()
        return data

async def collect_all():
    tasks = [
        scrape_system("https://order-system.co.jp",    "user","pass", ".order-table"),
        scrape_system("https://inventory-system.co.jp","user","pass", ".stock-table"),
        scrape_system("https://delivery-system.co.jp", "user","pass", ".delivery-table"),
    ]
    # 並行実行
    results = await asyncio.gather(*tasks, return_exceptions=True)
    print(f"3システムから並行取得完了:")
    for i, result in enumerate(results):
        if isinstance(result, Exception): print(f"  システム{i+1}: エラー {result}")
        else: print(f"  システム{i+1}: {len(result)}件")
    return results

order_data, stock_data, delivery_data = asyncio.run(collect_all())

# データ統合
orders_df   = pd.DataFrame(order_data,    columns=["受注番号","顧客","商品","数量","金額"])
stock_df    = pd.DataFrame(stock_data,    columns=["商品","在庫数","入荷予定"])
delivery_df = pd.DataFrame(delivery_data, columns=["受注番号","配送状況","到着予定"])

# 受注番号で統合
merged = orders_df.merge(delivery_df, on="受注番号", how="left")
print(f"統合完了: {len(merged)}件")
✅ 実行結果

3システムが並行実行で自動収集され、データ統合が完了しました。直列実行で9分かかっていた処理が並行処理で3分に短縮されています。

STEP 3:pyautoguiでデスクトップアプリを自動操作する

Excelなどのデスクトップアプリをpyautoguiで自動操作します。

💬 私はClaude Codeにこう頼みました:pyautoguiを使って以下のデスクトップ操作を自動化してください。
1. 経費精算アプリを開く
2. データを自動入力する
3. 申請ボタンをクリックする
🤖 Claude Codeの回答:pyautoguiでデスクトップアプリを自動操作するスクリプトを作成しました。
import pyautogui, time, subprocess
import pygetwindow as gw

pyautogui.FAILSAFE   = True   # 左上角にマウスを移動で緊急停止
pyautogui.PAUSE      = 0.5    # 操作間の待機(秒)

def open_expense_app():
    subprocess.Popen([r"C:\Program Files\ExpenseApp\expense.exe"])
    time.sleep(3)
    # ウィンドウが開くまで待機
    for _ in range(20):
        windows = gw.getWindowsWithTitle("経費精算システム")
        if windows:
            win = windows[0]
            win.activate()
            return True
        time.sleep(1)
    return False

def fill_expense_form(expense_data):
    # 画像認識でフォームのフィールドを特定
    date_field = pyautogui.locateCenterOnScreen("templates/date_field.png", confidence=0.8)
    if date_field:
        pyautogui.click(date_field)
        pyautogui.hotkey("ctrl","a")
        pyautogui.typewrite(expense_data["日付"], interval=0.05)
    
    amount_field = pyautogui.locateCenterOnScreen("templates/amount_field.png", confidence=0.8)
    if amount_field:
        pyautogui.click(amount_field)
        pyautogui.typewrite(str(expense_data["金額"]), interval=0.05)
    
    # カテゴリのドロップダウン
    cat_dropdown = pyautogui.locateCenterOnScreen("templates/category_dropdown.png", confidence=0.8)
    if cat_dropdown:
        pyautogui.click(cat_dropdown)
        time.sleep(0.5)
        category_option = pyautogui.locateCenterOnScreen(
            f"templates/cat_{expense_data['カテゴリ']}.png", confidence=0.8)
        if category_option: pyautogui.click(category_option)
    
    # 申請ボタンをクリック
    submit_btn = pyautogui.locateCenterOnScreen("templates/submit_btn.png", confidence=0.8)
    if submit_btn:
        pyautogui.click(submit_btn)
        time.sleep(1)
        print(f"  申請完了: {expense_data}")

expenses = [
    {"日付": "2026/04/26", "金額": 1500, "カテゴリ": "交通費"},
    {"日付": "2026/04/25", "金額": 3200, "カテゴリ": "飲食費"},
]

if open_expense_app():
    for expense in expenses:
        fill_expense_form(expense)
        time.sleep(1)
    print(f"経費精算 {len(expenses)}件を自動入力完了")
✅ 実行結果

経費精算アプリが自動起動され、2件の経費データが自動入力・申請されました。画像認識によるUI操作で柔軟に対応できています。

STEP 4:Webスクレイピングで競合情報を自動収集する

競合他社の価格・製品情報を定期自動収集して分析します。

💬 私はClaude Codeにこう頼みました:競合他社の製品ページをスクレイピングして商品名・価格・在庫状況を自動収集してExcelに保存してください。
🤖 Claude Codeの回答:Playwright + BeautifulSoupで競合情報のスクレイピングを実装しました。
from playwright.sync_api import sync_playwright
from bs4 import BeautifulSoup
import pandas as pd
from datetime import datetime

COMPETITOR_SITES = [
    {"name": "競合A", "url": "https://competitor-a.com/products", "selector": ".product-item"},
    {"name": "競合B", "url": "https://competitor-b.com/catalog",  "selector": ".item-card"},
]

def scrape_competitor_prices(site):
    products = []
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True)
        page    = browser.new_page()
        page.goto(site["url"], wait_until="networkidle")
        
        # ページを最下部までスクロール(遅延読み込み対応)
        for _ in range(3):
            page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
            page.wait_for_timeout(1000)
        
        html = page.content()
        browser.close()
    
    soup  = BeautifulSoup(html, "html.parser")
    items = soup.select(site["selector"])
    
    for item in items:
        name  = item.select_one(".product-name, .item-title, h2, h3")
        price = item.select_one(".price, .cost, [data-price]")
        stock = item.select_one(".stock, .availability")
        products.append({
            "会社":     site["name"],
            "商品名":   name.get_text(strip=True)  if name  else "",
            "価格":     price.get_text(strip=True) if price else "",
            "在庫":     stock.get_text(strip=True) if stock else "不明",
            "取得日時": datetime.now().strftime("%Y/%m/%d %H:%M"),
        })
    
    print(f"  {site['name']}: {len(products)}件取得")
    return products

all_products = []
for site in COMPETITOR_SITES:
    all_products.extend(scrape_competitor_prices(site))

df = pd.DataFrame(all_products)
df.to_excel(f"competitor_prices_{datetime.now():%Y%m%d}.xlsx", index=False)
print(f"競合情報収集完了: {len(all_products)}件")
✅ 実行結果

競合2社から合計156件の製品情報・価格が自動収集されました。毎日実行して価格変動をトラッキングできるようになっています。

STEP 5:全自動化フローをタスクスケジューラーで毎日実行する

毎朝8時にデータ収集→加工→レポート生成→Slack通知まで全自動で実行します。

💬 私はClaude Codeにこう頼みました:毎朝8時に受注データ収集・競合情報収集・レポート生成・Slack通知を順番に実行する
マスター自動化スクリプトを作ってください。
🤖 Claude Codeの回答:全自動化フローのマスタースクリプトと日次レポートを実装しました。
import subprocess, sys, time, logging, requests
from datetime import datetime, date

logging.basicConfig(filename="rpa_log.log", level=logging.INFO,
    format="%(asctime)s %(levelname)s %(message)s")

SLACK_WEBHOOK = "https://hooks.slack.com/services/YOUR/WEBHOOK"

def run_script(name, script_path, timeout=300):
    start = time.time()
    try:
        result = subprocess.run([sys.executable, script_path],
            capture_output=True, text=True, timeout=timeout)
        elapsed = time.time() - start
        if result.returncode == 0:
            logging.info(f"{name} 成功 ({elapsed:.0f}秒)")
            return True, result.stdout
        else:
            logging.error(f"{name} 失敗: {result.stderr}")
            return False, result.stderr
    except subprocess.TimeoutExpired:
        logging.error(f"{name} タイムアウト")
        return False, "タイムアウト"

def daily_automation():
    today = datetime.now()
    if today.weekday() >= 5: return  # 土日スキップ
    print(f"日次自動化開始: {today.strftime('%Y/%m/%d %H:%M')}")
    
    tasks = [
        ("受注データ収集",    "scrape_orders.py"),
        ("競合情報収集",      "scrape_competitors.py"),
        ("統合レポート生成",  "generate_report.py"),
        ("データベース更新",  "update_db.py"),
    ]
    
    results = {}
    for name, script in tasks:
        success, output = run_script(name, script)
        results[name] = "✅" if success else "❌"
    
    # Slackにサマリー通知
    summary = "
".join([f"{status} {name}" for name, status in results.items()])
    requests.post(SLACK_WEBHOOK, json={"blocks":[
        {"type":"header","text":{"type":"plain_text","text":f"🤖 日次RPA完了 {date.today()}"}},
        {"type":"section","text":{"type":"mrkdwn","text":summary}}
    ]})
    print("日次自動化完了")

daily_automation()
# schtasks /create /tn "日次RPA" /tr "python daily_rpa.py" /sc DAILY /st 08:00 /f
✅ 実行結果

毎朝8時の日次RPAフローが完全に自動化されました。受注収集→競合収集→レポート生成→DB更新→Slack通知が全自動で完了し、1時間の手作業がゼロになりました。

どんな現場で使われているか:活用シナリオ

対象者 導入前の課題 Claude Code導入後
総務・バックオフィス 基幹システムへの手入力・データ転記に毎日2時間かかる Playwrightで画面操作を自動化して転記作業を完全自動処理
IT担当 UiPathのライセンス費用が高く、単純作業の自動化が進まない Pythonで同等以上の自動化をゼロライセンス費用で実現
営業事務 Webサイトから競合価格を毎日手動で収集してExcelに記録 Playwrightで自動巡回・価格抽出・Excelへの自動記録を実現

実装で押さえるべき重要ポイント

  • 1
    操作対象の要素は複数の特定方法を組み合わせる:IDだけでなくdata属性・テキスト内容・aria-labelなど複数の特定方法を組み合わせることで、画面変更に強いRPAスクリプトを作れます。
  • 2
    待機処理はsleepではなくイベント待機を使う:time.sleep()の固定待機は遅延でエラーになりやすいです。Playwrightのwait_for_element()・wait_for_load_state()などイベントベースの待機を使いましょう。
  • 3
    実行ログと失敗スクリーンショットを必ず残す:RPA処理のどのステップで失敗したかを特定するために、各ステップのログ出力と失敗時の画面キャプチャ保存を実装することを強く推奨します。

ビジネスインパクト

ゼロ
RPAライセンス追加費用
毎日2時間
自動化できる手作業時間
365日24時間
無人稼働できる自動化時間

この記事のまとめ

  • ✅ pyautogui/Playwrightでブラウザ・デスクトップアプリの操作を完全自動化できる
  • ✅ UiPath等の高コストRPAツール不要でPythonだけで業務自動化を実現できる
  • ✅ Webスクレイピング・データ転記・ファイル操作をスクリプト1本で自動処理できる
  • ✅ 毎日2時間の手作業がゼロになりコアビジネスへの集中時間を確保できる


よくある質問(FAQ)

A. UiPath等のツール型RPAは設定が簡単な反面、ライセンス費用が高くカスタマイズに限界があります。PythonのRPAはコードで自由に実装でき、ライセンス費用ゼロで複雑な処理にも対応できます。Claude Codeがコード生成をサポートするため、プログラミング経験が少なくても実装できます。

A. CAPTCHAは意図的な自動化防止措置のため、倫理的・法的に回避すべきではありません。対象システムがAPIを提供している場合はAPIを使い、社内システムであれば管理者にボット用アカウントの発行を依頼することを推奨します。

A. 要素の特定にXPath・CSSセレクター・テキスト内容を組み合わせて使うことで耐変更性が上がります。画面キャプチャで変化を検知してアラートを出す仕組みと合わせて実装することを推奨します。定期的なメンテナンスの運用ルールを設けることも重要です。


関連記事


制作実績サンプル

このクオリティの資料が、あなたの業務でも作れます

Aurant Technologies が実際に制作したコンサルティング資料(全82枚)のサンプルです。Claude Code × AI自動化により、従来の1/5のコスト・時間で同等品質を実現します。

タイトルスライド

タイトル・ダーク背景
3カラム分析

3カラム比較・分析
AI活用フロー

AI活用フロー図解
Before/After

Before/After比較
RFPテンプレート

構造化コンテンツ
全10枚を
見る

御社のテーマでこのレベルの資料を作成できます
制作費・納期・自動化プランは無料相談でご確認いただけます

📊 サンプル全10枚を見る →

Claude Codeの導入を、プロに任せてみませんか?

Aurant TechnologiesはClaude Code導入支援・業務自動化の専門チームです。
初回相談は無料。御社の課題をヒアリングして最適な自動化プランをご提案します。

無料相談を申し込む →


AT
aurant technologies 編集

上場企業からスタートアップまで、数多くのデータ分析基盤構築・AI導入プロジェクトを主導。単なる技術提供にとどまらず、MA/CRM(Salesforce, Hubspot, kintone, LINE)導入によるマーケティング最適化やバックオフィス業務の自動化など、常に「事業数値(売上・利益)」に直結する改善実績多数。

この記事が役に立ったらシェア: