# BrowserToolkit

> **Class** in `langchain_aws`

📖 [View in docs](https://reference.langchain.com/python/langchain-aws/tools/browser_toolkit/BrowserToolkit)

Toolkit for navigating web with AWS browser with thread support.

This toolkit provides a set of tools for working with a remote browser
and supports multiple threads by maintaining separate browser sessions
for each thread ID. Browsers are created lazily only when needed.

## Signature

```python
BrowserToolkit(
    self,
    region: str = 'us-west-2',
    proxy_configuration: Optional[Union[ProxyConfiguration, Dict[str, Any]]] = None,
    extensions: Optional[Sequence[Union[BrowserExtension, Dict[str, Any]]]] = None,
    profile_configuration: Optional[Union[ProfileConfiguration, Dict[str, Any]]] = None,
)
```

## Description

**Example:**

```python
import asyncio
from langchain.agents import create_agent
from langchain_aws.tools import create_browser_toolkit

async def main():
    # Create toolkit with proxy and extensions
    toolkit, browser_tools = create_browser_toolkit(
        region="us-west-2",
        proxy_configuration={
            "proxies": [{
                "externalProxy": {
                    "server": "proxy.example.com",
                    "port": 8080,
                    "credentials": {
                        "basicAuth": {
                            "secretArn": "arn:aws:secretsmanager:..."
                        }
                    },
                }
            }],
        },
        extensions=[{
            "location": {
                "s3": {"bucket": "my-bucket", "prefix": "ext.zip"}
            }
        }],
        profile_configuration={
            "profileIdentifier": "my-profile-id"
        },
    )

    # Create a ReAct agent using the browser tools
    agent = create_agent(
        "bedrock_converse:us.anthropic.claude-haiku-4-5-20251001-v1:0",
        tools=browser_tools
    )

    # Create runnable config with thread ID
    config = {
        "configurable": {
            "thread_id": "session123"
        }
    }

    # Invoke the agent with a specific task using thread ID
    result = await agent.ainvoke(
        "Navigate to https://www.example.com and tell me "
        "the main heading on the page.",
        config=config
    )

    # Clean up browser resources when done
    await toolkit.cleanup()

    return result

# Run the example
asyncio.run(main())
```

## Parameters

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `region` | `str` | No | AWS region for the browser client. (default: `'us-west-2'`) |
| `proxy_configuration` | `Optional[Union[ProxyConfiguration, Dict[str, Any]]]` | No | Proxy routing config. Accepts a ``ProxyConfiguration`` dataclass or equivalent dict with ``proxies`` and optional ``bypass`` keys. Example::      {         "proxies": [{             "externalProxy": {                 "server": "proxy.example.com",                 "port": 8080,                 "credentials": {                     "basicAuth": {                         "secretArn": "arn:aws:secretsmanager:..."                     }                 },             }         }],         "bypass": {             "domainPatterns": ["169.254.169.254"]         },     } (default: `None`) |
| `extensions` | `Optional[Sequence[Union[BrowserExtension, Dict[str, Any]]]]` | No | Browser extensions to load. Accepts a list of ``BrowserExtension`` dataclasses or equivalent dicts with an S3 ``location``. Example::      [         {             "location": {                 "s3": {                     "bucket": "my-extensions-bucket",                     "prefix": "tampermonkey.zip",                 }             }         }     ] (default: `None`) |
| `profile_configuration` | `Optional[Union[ProfileConfiguration, Dict[str, Any]]]` | No | Profile for persisting browser state across sessions. Accepts a ``ProfileConfiguration`` dataclass or dict with a ``profileIdentifier`` key. Example::      {"profileIdentifier": "my-browser-profile-id"} (default: `None`) |

## Constructors

```python
__init__(
    self,
    region: str = 'us-west-2',
    proxy_configuration: Optional[Union[ProxyConfiguration, Dict[str, Any]]] = None,
    extensions: Optional[Sequence[Union[BrowserExtension, Dict[str, Any]]]] = None,
    profile_configuration: Optional[Union[ProfileConfiguration, Dict[str, Any]]] = None,
)
```

| Name | Type |
|------|------|
| `region` | `str` |
| `proxy_configuration` | `Optional[Union[ProxyConfiguration, Dict[str, Any]]]` |
| `extensions` | `Optional[Sequence[Union[BrowserExtension, Dict[str, Any]]]]` |
| `profile_configuration` | `Optional[Union[ProfileConfiguration, Dict[str, Any]]]` |


## Properties

- `region`
- `session_manager`
- `tools`

## Methods

- [`get_tools()`](https://reference.langchain.com/python/langchain-aws/tools/browser_toolkit/BrowserToolkit/get_tools)
- [`get_tools_by_name()`](https://reference.langchain.com/python/langchain-aws/tools/browser_toolkit/BrowserToolkit/get_tools_by_name)
- [`get_active_sessions()`](https://reference.langchain.com/python/langchain-aws/tools/browser_toolkit/BrowserToolkit/get_active_sessions)
- [`cleanup()`](https://reference.langchain.com/python/langchain-aws/tools/browser_toolkit/BrowserToolkit/cleanup)

---

[View source on GitHub](https://github.com/langchain-ai/langchain-aws/blob/285069d4f44907e10aaf7743888689ea39c98fe3/libs/aws/langchain_aws/tools/browser_toolkit.py#L19)