browser-use でログインしたサービスの、httponly=true のセッションクッキーを取得する

Python
2025-05-21 03:10 (9 months ago)
Browser's Secret
この記事をテーマにした曲を再生

browser-use を使って Web サービスにログインした際に発行されるセッションクッキーを取得する方法です。

セッションクッキーは、通常 httponly=true で発行されるため、browser-use に 「セッションクッキーを取得して」と依頼しても返されません。

Javascript ではアクセスできないためです。

取得したい場合、browser_use.Browser インスタンス をあらかじめ作っておき、browser-use の Agent に注入することにより、 処理中に Playwright のブラウザインスタンスを扱うことができるようになります。

セッションクッキーに限らず、ブラウザ内部の細かいリソースを取り扱う場合に有効だと思います。

from browser_use import Agent, Browser
from langchain_openai import ChatOpenAI


DEFAULT_LLM_MODEL = "gpt-4.1-mini"


def get_sessoin_cookies():

    browser = Browser()
    current_cookies = []
    
    async def handle_step(browser_state, agent_output, step_number):
        nonlocal browser, current_cookies
        try:
            # Playwright のインスタンスを扱う
            context = browser.playwright_browser.contexts[0]
            current_cookies = list(await context.cookies())
        except Exception as e:
            print(
                'An error occurred while getting cookies: '
                f'{e.__class__.__name__}: {e}'
            )

    _login_prompt = '自社のウェブサービス ◯◯ にログインしてください。\n\n...'

    async def run_agent():
        agent = Agent(
            task=_login_prompt,
            browser=browser,
            llm=ChatOpenAI(model=DEFAULT_LLM_MODEL),
            register_new_step_callback=handle_step,
        )
        await agent.run(max_steps=5)

    asyncio.run(run_agent())

    # ログイン完了。ここでクッキーが取得できている
    print(current_cookies)

アーカイブ