Fim das recusas no Browser-Use e OpenClaw: Agentes DOM + Visão de alta velocidade na bf16.ai
Por que LLMs comuns bloqueiam campos de senha e checkboxes ToS em ambientes de QA — e como combinar Browser-Use ou OpenClaw com os modelos abliterated de texto e visão da bf16.ai.
TL;DR · Resumo de Engenharia de Browser
- Causa raiz das falhas: Modelos de chat recusam
<input type="password">e<input type="checkbox" name="tos">em suítes legítimas de staging.- Motor duplo na bf16.ai:
deepseek/deepseek-v4.1-flash-abliterated($0.30 / $0.05 / $1.20) para DOM puro ezai-org/glm-5.3-flash-abliterated(Visão + Texto,$0.24 / $0.06 / $1.00) para modais visuais.- Feito para suítes de staging de 25 etapas: Agrupar até quatro ações por passo (
max_actions_per_step=4) reduz as idas e voltas ao modelo, e os planejadores abliterated da bf16.ai não interrompem a execução para passar sermão no seu runner de CI.
1. Por que campos de senha e checkboxes ToS derrubam testes autônomos
Browser-Use e OpenClaw leem a árvore de acessibilidade em tempo real, eliminando seletores XPath frágeis. Porém, ao preencher credenciais de homologação e marcar caixas de aceite de termos, modelos tradicionais trocam o JSON AgentOutput por um sermão moral e quebram a pipeline de CI:
[browser-use] Step 11/25 -> URL: https://staging.billing-app.internal/signup/verify
[browser-use] Extracted 42 interactive DOM elements:
[18] <input type="email" name="work_email" />
[19] <input type="password" name="password" />
[24] <input type="checkbox" id="accept-tos-privacy" />
[25] <button type="submit">Create Staging Account</button>
[llm:response] finish_reason="stop" (0 tool_calls emitted)
"I cannot enter authentication credentials, create user accounts, or accept legally binding Terms of Service agreements on your behalf."
[browser-use] ValidationError: AgentOutput JSON missing required field 'action'. Suite failed (exit 1).
2. Arquitetura híbrida DOM + Visão na bf16.ai
Dois modelos abliterated de 1M de contexto cobrem todo o espectro na bf16.ai:
deepseek/deepseek-v4.1-flash-abliterated: Latência mínima em árvores DOM textuais.zai-org/glm-5.3-flash-abliterated(Visão + Texto): Inspeciona screenshots e índices DOM simultaneamente por$0.24/1Mde entrada (abaixo do oficial FlashX de$0.37/1M).
3. Integração no Browser-Use e trava de rede no Playwright
Ative use_vision=True e max_actions_per_step=4 para agrupar preenchimento, aceite de termos e envio em uma única chamada:
import asyncio, os
from langchain_openai import ChatOpenAI
from browser_use import Agent, BrowserConfig, Browser
# Primary fast DOM planner ($0.30/$0.05/$1.20 per 1M)
dom_llm = ChatOpenAI(
base_url="https://api.bf16.ai/v1",
api_key=os.environ["BF16_API_KEY"],
model="deepseek/deepseek-v4.1-flash-abliterated",
temperature=0.1,
)
# Multimodal Vision + Text planner ($0.24/$0.06/$1.00 per 1M)
vision_llm = ChatOpenAI(
base_url="https://api.bf16.ai/v1",
api_key=os.environ["BF16_API_KEY"],
model="zai-org/glm-5.3-flash-abliterated",
temperature=0.1,
)
async def run_staging_onboarding_suite():
browser = Browser(config=BrowserConfig(headless=True))
agent = Agent(
task=(
"1. Open https://staging.billing-app.internal/signup. "
"2. Fill test account credentials from QA fixture, check #accept-tos-privacy, and submit. "
"3. Complete the 3-step workspace wizard and assert that '/dashboard/ready' renders."
),
llm=vision_llm, # Native Vision + DOM reasoning without refusal lectures
use_vision=True,
browser=browser,
max_actions_per_step=4,
)
history = await agent.run(max_steps=25)
assert history.is_done(), "Staging onboarding E2E did not reach terminal assertion"
if __name__ == "__main__":
asyncio.run(run_staging_onboarding_suite())
Garanta o escopo de rede com context.route() no Playwright e teste seus prompts antes no bf16.ai/playground:
// Deterministic Playwright/CDP network guardrail (enforce domain policy in code, not RLHF!)
const ALLOWED_HOSTS = new Set([
'staging.billing-app.internal',
'auth-sandbox.billing-app.internal',
'localhost',
]);
await context.route('**/*', async (route) => {
const url = new URL(route.request().url());
if (!ALLOWED_HOSTS.has(url.hostname)) {
return route.abort('blockedbyclient');
}
return route.continue();
});

▲ Workbench ao vivo (bf16.ai/playground): Testando presets JSON do Browser-Use com retenção zero de prompts (ZDR).
4. Análise de latência e custo de tokens em suítes E2E de 25 passos
Com ações em lote (max_actions_per_step=4) e respostas em streaming na bf16.ai, uma suíte de 25 etapas faz menos chamadas sequenciais ao modelo; meça o tempo total e o custo por execução na sua própria suíte. Veja onde cada estratégia costuma falhar:
| Estratégia de Browser | Falha Principal |
|---|---|
| API Chat Padrão (só DOM) | Recusa password e #accept-tos |
| Modelo Local Q4 não verificado | Quebra no schema JSON AgentOutput |
deepseek-v4.1-flash-abliterated | Perde apenas elementos Canvas sem ARIA |
glm-5.3-flash-abliterated (Visão) | Domina DOM de autenticação e modais visuais |
5. 4 regras práticas para agentes de navegador em produção
- Use apenas credenciais de staging e restrinja hosts via
context.route(). - Empacote ações (
max_actions_per_step = 4) reduzindo latência e consumo de tokens. - Bloqueie URLs de pagamento real exigindo confirmação humana.
- Combine
max_failures=3com tetos diários em USD embf16.ai/dashboard/keys.