Claude Computer Useで始めるブラウザ自動化|Pythonによる実装入門ガイド

AI・ChatGPT活用

ブラウザ自動化の実装を検討していても、Claude Computer Useの活用方法が分からず、どこから始めたら良いか困っていませんか。多くのエンジニアにとって、AIツールを実際の業務に組み込むことは難しいものです。

しかしClaude Computer Useを使えば、複雑なブラウザ操作を自動化できます。本記事では、初心者向けに実践的なPython実装方法をステップバイステップで解説します。サンプルコード付きで、すぐに開発に活用できる知識が身につきます。

Claude Computer Useとは

Claude Computer Useは、Anthropic社が提供する最新のAIモデル機能です。このツールを使うことで、テキストベースのプログラミングに留まらず、実際のコンピュータ操作をAIに実行させることができます。

具体的には以下のような操作が可能です:

  • ブラウザの自動操作(クリック、入力、スクロール)
  • ウェブサイト上のデータ抽出と分析
  • 複数ステップの定型業務の自動化
  • エラー対応と例外処理の自動実行

従来のセレニウムやBeautiful Soupなどのツールとの違いは、AIが動的な判断を含めて操作できることです。ページレイアウトの変更に対応したり、予期しない状況を処理したりすることが容易になります。

環境準備:必要なツールとインストール手順

Claude Computer UseをPythonで実装するには、事前に環境を整える必要があります。以下の手順に従って進めてください。

1. Python環境の構築

Python 3.9以上がインストールされていることを確認します。

python --version

次に、仮想環境を作成して依存関係を分離します。

python -m venv claude_automation_env
source claude_automation_env/bin/activate  # Mac/Linux
# または
claude_automation_env\Scripts\activate  # Windows

2. 必要なパッケージのインストール

Claude Computer Useを利用するには、公式SDKと補助ライブラリが必要です。

pip install anthropic
pip install playwright
pip install python-dotenv

Playwrightはブラウザを制御するためのツールで、Chromium、Firefox、WebKitに対応しています。初回実行時にブラウザバイナリをダウンロードします。

playwright install

3. APIキーの設定

Claude APIを利用するには、Anthropic公式サイトでAPIキーを取得する必要があります。

.envファイルを作成して、以下の形式でキーを保存します。

ANTHROPIC_API_KEY=your_api_key_here

Pythonコードから安全に読み込むため、python-dotenvライブラリを使用します。

基本的な実装:Hello Worldから始める

まずは最もシンプルな例からスタートします。Googleの検索ページを開き、検索キーワードを入力する自動化を実装します。

import os
from anthropic import Anthropic
from dotenv import load_dotenv

load_dotenv()
client = Anthropic()

def simple_browser_automation():
    response = client.messages.create(
        model="claude-5-sonnet-20241022",
        max_tokens=4096,
        tools=[
            {
                "name": "computer_use",
                "description": "ブラウザを操作してコンピュータタスクを実行",
                "input_schema": {
                    "type": "object",
                    "properties": {
                        "action": {
                            "type": "string",
                            "enum": ["click", "type", "screenshot", "scroll"]
                        },
                        "coordinates": {
                            "type": "array",
                            "items": {"type": "integer"},
                            "description": "[x, y]形式の座標"
                        },
                        "text": {
                            "type": "string"
                        }
                    },
                    "required": ["action"]
                }
            }
        ],
        messages=[
            {
                "role": "user",
                "content": "Googleで『Claude AI ブラウザ自動化』を検索してください"
            }
        ]
    )
    
    print(response.content)

if __name__ == "__main__":
    simple_browser_automation()

このコードは基本構造を示していますが、実際にはClaudeからのレスポンスを処理し、ブラウザ操作を実行するループが必要です。

実践的な例:ブラウザ操作ループの実装

より実用的な実装では、Claude Computer Useと連携して複数回のやり取りを処理します。

import os
import base64
from anthropic import Anthropic
from playwright.sync_api import sync_playwright
from dotenv import load_dotenv

load_dotenv()
client = Anthropic()

class BrowserAutomation:
    def __init__(self):
        self.browser = None
        self.page = None
        self.playwright = None
    
    def start_browser(self):
        """ブラウザを起動"""
        self.playwright = sync_playwright().start()
        self.browser = self.playwright.chromium.launch(headless=False)
        self.page = self.browser.new_page()
    
    def screenshot(self):
        """スクリーンショットを取得"""
        screenshot_data = self.page.screenshot()
        return base64.standard_b64encode(screenshot_data).decode("utf-8")
    
    def execute_action(self, action, coordinates=None, text=None):
        """Claude Computer Useからの指示で操作を実行"""
        if action == "click" and coordinates:
            self.page.click(f"css=[x='{coordinates[0]}'][y='{coordinates[1]}']")
        elif action == "type" and text:
            self.page.keyboard.type(text)
        elif action == "scroll" and coordinates:
            self.page.evaluate(f"window.scrollBy({coordinates[0]}, {coordinates[1]})")
    
    def automate_task(self, task_description):
        """タスク実行の主要ループ"""
        self.start_browser()
        self.page.goto("https://www.google.com")
        
        messages = [
            {
                "role": "user",
                "content": [
                    {
                        "type": "text",
                        "text": task_description
                    },
                    {
                        "type": "image",
                        "source": {
                            "type": "base64",
                            "media_type": "image/png",
                            "data": self.screenshot()
                        }
                    }
                ]
            }
        ]
        
        while True:
            response = client.messages.create(
                model="claude-5-sonnet-20241022",
                max_tokens=1024,
                messages=messages,
                system="ブラウザ上で指定されたタスクを実行してください。JSONフォーマットで次のアクションを返してください:{\"action\": \"click|type|scroll|done\", \"coordinates\": [x, y], \"text\": \"input_text\"}"
            )
            
            # レスポンス処理(簡略版)
            if "done" in str(response.content).lower():
                break
            
            # アクション実行(実装は省略)
            messages.append({
                "role": "assistant",
                "content": str(response.content)
            })
            messages.append({
                "role": "user",
                "content": [
                    {
                        "type": "image",
                        "source": {
                            "type": "base64",
                            "media_type": "image/png",
                            "data": self.screenshot()
                        }
                    }
                ]
            })
        
        self.browser.close()

if __name__ == "__main__":
    automation = BrowserAutomation()
    automation.automate_task("Googleで『Python ブラウザ自動化』と検索して、最初の結果をクリックしてください")

このコード例では、以下の流れで自動化を実現しています:

  • Playwrightでブラウザを起動
  • 現在の画面をスクリーンショット
  • ClaudeにスクリーンショットとタスクをAPI送信
  • Claudeが返すアクションを実行
  • このループをタスク完了まで繰り返す

実装時に注意すべきポイント

エラーハンドリング

ブラウザ自動化では、要素が見つからない、タイムアウト、ネットワークエラーなど様々な問題が発生します。以下のように例外処理を組み込むことが重要です。

def safe_click(self, selector, timeout=5000):
    """安全なクリック操作"""
    try:
        self.page.wait_for_selector(selector, timeout=timeout)
        self.page.click(selector)
        return True
    except Exception as e:
        print(f"クリック失敗: {e}")
        return False

複雑な非同期処理が必要な場合は、Python非同期処理でエラーが頻発する理由|asyncioとaiohttpの実践的解決策も参考になります。

レート制限への対応

Claude APIはレート制限が設定されています。複数のリクエストを連続で送信する場合は、時間間隔を挟みます。

import time

def rate_limited_request(self, messages, delay=1):
    """レート制限に対応したリクエスト"""
    time.sleep(delay)
    response = client.messages.create(
        model="claude-5-sonnet-20241022",
        max_tokens=1024,
        messages=messages
    )
    return response

スクリーンショットのサイズ最適化

大きなスクリーンショットはAPI呼び出しのコストを増加させます。必要に応じて画像を圧縮します。

from PIL import Image
import io

def optimize_screenshot(self, screenshot_data, max_width=1280):
    """スクリーンショットを最適化"""
    image = Image.open(io.BytesIO(screenshot_data))
    if image.width > max_width:
        ratio = max_width / image.width
        new_height = int(image.height * ratio)
        image = image.resize((max_width, new_height), Image.Resampling.LANCZOS)
    
    output = io.BytesIO()
    image.save(output, format="PNG", optimize=True)
    return base64.standard_b64encode(output.getvalue()).decode("utf-8")

実装の応用例

データ取集の自動化

複数のウェブサイトから定期的にデータを収集するタスクを自動化できます。

  • 株価データの自動収集
  • 求人情報のスクレイピング
  • 競合他社の価格監視

フォーム入力の自動化

Claudeが自然言語でフォーム内容を理解し、適切に入力します。

  • 顧客情報の一括登録
  • 複雑なアンケートフォームの自動入力
  • 複数ページのウィザード入力

テスト自動化の強化

Claude codeを使った自動化の極意:エンジニアが知るべき実践テクニックで詳しく解説していますが、Claudeを活用することでUIテストの効率が大幅に向上します。

デバッグとトラブルシューティング

ログの活用

自動化スクリプトが失敗した場合、ログを記録して原因を特定します。

import logging

logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    handlers=[
        logging.FileHandler('automation.log'),
        logging.StreamHandler()
    ]
)

logger = logging.getLogger(__name__)

def automate_with_logging(self, task_description):
    logger.info(f"タスク開始: {task_description}")
    try:
        # 処理内容
        logger.debug("スクリーンショット取得成功")
    except Exception as e:
        logger.error(f"エラー発生: {e}", exc_info=True)

ビジュアルデバッグ

headless=Falseでブラウザを表示させることで、実際の動作を確認できます。開発時はこれを活用します。

# 開発時
self.browser = self.playwright.chromium.launch(headless=False)

# 本番時
self.browser = self.playwright.chromium.launch(headless=True)

パフォーマンス最適化のコツ

大規模な自動化を実装する際は、パフォーマンスの考慮が重要です。

  • 並列処理:複数の独立したタスクは同時実行できます
  • キャッシング:同じスクリーンショット解析は結果を保存
  • スケジューリング:重い処理は非ピーク時間に実行

効率的な開発環境を整えるために、エンジニアが選ぶデュアルモニター縦置き設定ガイド|実際の作業効率向上を体験した設定術も参考になります。

おすすめ書籍・ガジェット

  • Pythonプログラミング入門:AI自動化の基礎となるPythonをしっかり学べる実践的なテキストです。
  • Claude API活用ガイド:AnthropicのClaudeを実務で活用するための具体的な手法が詰め込まれた一冊です。
  • HHKB Professional:長時間のコーディング作業に最適な高機能キーボード。入力効率が大幅に向上します。

まとめ

Claude Computer UseとPythonを組み合わせることで、ブラウザ自動化を強力かつ柔軟に実装できます。本記事で解説した基本的な手順と実装例を参考に、まずはシンプルなタスクから始めることをお勧めします。

重要なポイントは以下の通りです:

  • 環境構築から始める際は、仮想環境とAPIキー設定を忘れずに
  • 基本的なコード例を理解した後、段階的に複雑なタスクに挑戦
  • エラーハンドリングとログ記録は最初から組み込む
  • パフォーマンスとコスト最適化を考慮した設計をする

Claudeの自動化機能を活用することで、業務効率が大幅に向上し、より創造的な仕事に時間を使える環境が実現します。ぜひこの記事の内容を参考に、実装を始めてみてください。

Claude Computer Useはどのプログラミング言語でもサポートされていますか?

Claude Computer UseはAnthropicが提供するAPIベースの機能です。公式にはPython、JavaScript、その他複数の言語でSDKが提供されており、REST APIを使用すれば理論上はどの言語からもアクセス可能です。ただし、ブラウザ自動化との組み合わせを考えると、Pythonで豊富なライブラリ(Playwright、Selenium)が利用できるため、Pythonが最も実装しやすいです。

Claude Computer Useの利用コストはどのくらいですか?

Claudeは入力トークン(プロンプト)と出力トークン(レスポンス)で課金されます。具体的な料金はAnthropicの公式サイトで確認できますが、スクリーンショットを含む場合はトークン消費が増えます。1回の自動化タスクで数百〜数千トークン消費することが一般的です。大規模運用を予定する場合は、事前にコスト計算をすることをお勧めします。

Playwrightの代わりにSeleniumを使用することはできますか?

はい、可能です。Seleniumはブラウザコントロールのデファクトスタンダードであり、Chromeドライバーなど複数のブラウザをサポートしています。本記事ではPlaywrightを例に挙げていますが、Seleniumでも基本的な実装パターンは変わりません。ただしPlaywrightはより最新の非同期処理に対応しており、パフォーマンスが優れているため、新規プロジェクトではPlaywrightをお勧めします。

複数の画面でClaudeを使った自動化を同時実行できますか?

はい、複数のブラウザインスタンスやタブで並列実行することは技術的に可能です。ただし、Anthropic APIのレート制限を超えないよう注意が必要です。大規模な並列処理が必要な場合は、ジョブキューイングシステムを導入して、リクエストを制御することをお勧めします。Pythonではconcurrent.futuresやAsyncioを使用して並列処理を実装できます。

Claudeが誤った操作を実行した場合、どのように修正すればよいですか?

自動化スクリプトではエラーハンドリングが重要です。Claudeの判断が誤っている場合は、プロンプトを改善して、より詳細で明確な指示を与えることで精度が向上します。また、クリティカルなアクション(データ削除など)の前には、確認ステップを組み込むことをお勧めします。ログ記録を充実させることで、何がうまくいかなかったかを特定でき、スクリプトの改善につながります。

タイトルとURLをコピーしました