Para montar um agente Browser Use em Python, passe a Agent um modelo, um Browser novo e uma tarefa com resposta verificável. O exemplo lê um título e um código de uma página HTML local. O Pydantic verifica a estrutura, e o programa compara os valores com a página.
Um relato no GitHub sobre validação de ações mostra uma versão antiga que rejeitava ações geradas pelo modelo. Essa etapa vem antes da resposta final. O código segue o guia de início rápido e a documentação de saída. O exemplo foi conferido com a documentação e não foi executado de ponta a ponta.
Pontos principais
Use a biblioteca Python do Browser Use para controlar a sessão, a tarefa e a validação no aplicativo.
Comece com um HTML local e uma sessão sem contas conectadas.
O navegador e o modelo podem rodar em lugares diferentes.
ChatBrowserUsechama um modelo hospedado mesmo com Chromium local.history.is_successful()traz a avaliação do próprio agente. Confira os valores separadamente.Use uma página sem formulário, conta ou upload no primeiro teste.
Onde executar o navegador e o modelo
O modelo escolhe ações. O navegador as executa. O código Python faz a ligação. Essa diferença ajuda a escolher entre um agente de navegador, passos fixos no Playwright e uma busca na web.
| Configuração | Onde roda o navegador | Quando escolher |
|---|---|---|
| Biblioteca Python e navegador local | Na máquina do script | Você quer ler uma página local e validar a saída em Python |
| Biblioteca Python e navegador remoto | Em uma sessão acessível ao script | Você precisa de infraestrutura remota com acesso à página |
| Agente hospedado no Browser Use Cloud | Em infraestrutura gerenciada | Você quer a API do agente hospedado e pode oferecer um destino acessível |
O exemplo usa a primeira opção. Configure BROWSER_USE_API_KEY no ambiente ou em um arquivo .env local, conforme o guia de início rápido. Mantenha a chave fora do repositório. Execute os comandos em uma pasta nova com uv instalado.
uv init --python 3.12
uv add browser-use
uvx browser-use installO último comando prepara o Chromium. Guarde o arquivo de bloqueio para reproduzir a instalação. O guia de modelos compatíveis inclui ChatOllama. Ao mudar de provedor, use a mesma página e os mesmos valores esperados. Confira tanto as ações quanto a saída final. O guia do Cloud explica a autenticação e a sessão desse serviço.
Uma pergunta de QA no Reddit procura um modelo auto-hospedado para manter dados de clientes na própria infraestrutura. Se esse for seu requisito, escolha um modelo local. Este exercício envia apenas dados fictícios.
Crie uma página com uma resposta conhecida
Salve o arquivo como fixture/index.html. A página contém texto de teste e um código fictício. Execute o servidor em outro terminal. Ele publica apenas o diretório fixture.
<!doctype html>
<html lang="en">
<meta charset="utf-8">
<title>Inventory fixture</title>
<main>
<h1>Inventory Check</h1>
<p>Reference code: BU-741</p>
</main>
</html>uv run python -m http.server 8765 --bind 127.0.0.1 --directory fixtureO endereço 127.0.0.1 aponta para a máquina do navegador. Um navegador remoto vai abrir o próprio endereço local. Neste exercício, mantenha o servidor e o navegador na mesma máquina. Abra a página manualmente se precisar confirmar a conexão.
Execute o agente e compare os dois campos
Salve check_page.py na raiz do projeto. Os parâmetros do navegador mostram como restringir domínios. Os parâmetros do Agent explicam o esquema de saída. A instrução leva a URL. Os valores esperados ficam no verificador para que o agente tenha de lê-los na página.
import asyncio
from tempfile import TemporaryDirectory
from browser_use import Agent, Browser, ChatBrowserUse
from pydantic import BaseModel
URL = "http://127.0.0.1:8765/"
class PageCheck(BaseModel):
heading: str
reference: str
async def main():
with TemporaryDirectory(prefix="browser-use-fixture-") as profile:
browser = Browser(
headless=True,
user_data_dir=profile,
allowed_domains=["127.0.0.1"],
accept_downloads=False,
)
try:
agent = Agent(
task=(
f"Open {URL} and read its visible heading and reference code. "
"Return only those two values. Do not interact with any form."
),
browser=browser,
llm=ChatBrowserUse(),
output_model_schema=PageCheck,
)
history = await agent.run(max_steps=5)
result = history.structured_output
expected = PageCheck(heading="Inventory Check", reference="BU-741")
if result != expected:
raise RuntimeError("The output does not match the fixture.")
print(result.model_dump_json())
finally:
await browser.stop()
if __name__ == "__main__":
asyncio.run(main())uv run python check_page.pySe o script imprimir o resultado esperado, o título será Inventory Check e o código será BU-741. Se algum valor divergir, examine o histórico antes de aumentar o limite de passos. O agente pode apenas repetir uma ação que já falhou.
Confira a visita, a saída e os efeitos em separado

Procure um pedido para / no log do servidor durante a execução. Compare com history.urls(), history.errors() e a saída no terminal. O guia de saída distingue o fim da execução, o sucesso declarado e o resultado verificado.
Separe o perfil de teste do perfil de uso diário. Conectar um navegador existente muda quais sessões e cookies o agente pode acessar. A lista de domínios limita a navegação. Em um sistema real, use uma conta de teste e aplique permissões de leitura no servidor. Consulte os riscos de segurança dos agentes.
Descubra qual etapa falhou primeiro
| Sintoma | Onde olhar primeiro | Próxima verificação |
|---|---|---|
| O navegador inicia mas o servidor não recebe pedidos | Máquina, endereço local, porta e regras de navegação | Abra a página no ambiente em que o Chromium roda |
| O provedor rejeita o pedido | Chave, endpoint, adaptador e acesso ao modelo | Leia o erro do provedor antes de mudar o navegador |
| O histórico registra ações inválidas | Adaptador e versão do Browser Use | Rode a mesma tarefa com um adaptador documentado |
| O objeto é válido mas um campo diverge | Conteúdo visto e texto copiado | Compare cada campo com o HTML e com o log |
Um relato sobre CDP remoto descreve uma sessão travada em chamadas do protocolo do navegador. É uma etapa diferente da validação de ações. Os dois relatos se referem a versões específicas. Use o erro da sua execução para escolher por onde começar.
Se a tarefa puder criar registros ou enviar mensagens, confira o sistema de destino antes de repetir uma execução que excedeu o tempo limite. Nesta página de leitura, você pode refazer a visita e conferir o log.
Quando manter a integração em Python
Use Python quando o aplicativo precisar consumir e verificar campos tipados. Para URL, seletores e passos fixos, um script de navegador resolve. Se você só quer conferir o texto uma vez, abra a página diretamente. A comparação entre Tabbit e Browser Use e o guia de navegadores com agentes explicam a diferença entre uma interface e uma integração em código.
Na primeira execução, confirme que o servidor recebeu o pedido e que os campos correspondem. Depois, troque o navegador, o provedor ou a página um de cada vez.
Perguntas frequentes
A biblioteca Python exige uma chave do Browser Use?
O adaptador ChatBrowserUse exige uma chave do Browser Use. Outros adaptadores têm configurações próprias, e o Ollama pode rodar localmente sem essa chave.
Posso usar um modelo Ollama local?
Sim. A documentação inclui ChatOllama. Confira se o modelo consegue gerar ações para o navegador e produzir a saída conforme o esquema.
Como manter a primeira tarefa somente para leitura?
Use uma página de teste sem contas ou endpoints de escrita. Ao integrar um aplicativo real, aplique permissões de leitura no servidor.
Por que o navegador remoto não abre localhost?
O endereço local aponta para a máquina que roda o navegador. Execute o servidor e o navegador na mesma máquina ou exponha um endpoint de teste acessível à sessão remota.
O que significa history.is_successful()?
É a avaliação do próprio agente. Verifique o sistema de destino e os valores retornados separadamente.
O que fazer se structured_output estiver vazio?
Veja o histórico em busca de erros de navegação, provedor ou ações. Confira se a execução terminou com output_model_schema configurado antes de mudar o esquema ou o limite.