Extensões do Chrome, inclusive Manifest V2
Passe uma lista de pastas de extensões descompactadas e o Clearcote as carrega na inicialização. Funciona com Manifest V3 e também com Manifest V2, que o Chrome de fábrica já terminou de desligar; assim, bloqueadores de conteúdo MV2 e ferramentas internas mais antigas continuam rodando. Em headless também.
Em todos os planos, no Windows e no Linux.
Uma lista de pastas
from clearcote import launch_persistent_context
ctx = launch_persistent_context(
"./profile",
extensions=["./ext/ublock", "./ext/my-helper"], # unpacked directories, MV2 or MV3
headless=True, # works headed too
)
page = ctx.pages[0] if ctx.pages else ctx.new_page()
page.goto("https://example.com")Destaques
O Manifest V2 continua rodando
O conjunto de patches de privacidade do upstream restaura o suporte a MV2, então bloqueadores que só existem em MV2 e ferramentas mais antigas continuam funcionando aqui depois de pararem de funcionar no Chrome.
Headless e headed
As extensões carregam tanto em modo headless quanto em headed, sem precisar de display virtual só para colocar uma para rodar.
O par de flags, já resolvido
Sozinho, o --load-extension é ignorado sob automação. O SDK o define junto com o --disable-extensions-except, e assim a extensão aparece de fato.
Pastas, não arquivos .crx
Aponte para a pasta que contém o manifest.json. Um .crx, descompactado, vira uma pasta dessas.
Windows e Linux
A mesma opção nas duas plataformas, em headed e headless.
Seu código, sua superfície
O Clearcote não esconde extensões. Prefira as que não têm web_accessible_resources, já que uma página pode sondar esses recursos.
Como as extensões são carregadas
Extensões precisam de um perfil onde morar. O launch() roda num perfil descartável, então aceita extensões, assim como launch_persistent_context / launchPersistentContext e serve() (.NET: Extensions). Os únicos launches que não aceitam são os anônimos (ephemeral_profile=False, o launch() da API assíncrona, LaunchAsync no .NET). Navegadores hospedados não carregam extensões.
O Clearcote não consegue instalar nem atualizar extensões pela Chrome Web Store: os patches de privacidade do upstream removem essa integração, então extensões carregadas assim nunca se atualizam sozinhas. Em vez disso, distribua o diretório descompactado junto com a sua automação, o mesmo modelo que o Playwright e o Puppeteer usam.
Uma extensão é observável. Content scripts que reescrevem o DOM, injetam estilos ou bloqueiam requisições mudam o que a página mede, e qualquer página pode buscar os recursos web-accessible declarados. Se você só precisa bloquear requisições, o Network.setBlockedURLs do CDP, na camada de automação, bloqueia por padrão de URL sem nenhuma superfície de extensão e mantém o cache (o route() do Playwright também funciona, mas desliga o cache).
Para que as pessoas usam
Bloqueio de conteúdo
Rode o build MV2 de um bloqueador que o Chrome não carrega mais.
Testar a sua própria extensão
Testes end-to-end de uma extensão, em headless, no CI.
Ferramentas internas
Extensões da empresa para ajudar no login, fazer anotações ou QA, dentro de sessões automatizadas.
O Clearcote foi feito para privacidade, testes, pesquisa e automação lícita. Você é responsável pela forma como o usa e por seguir os termos dos sites que visita.
Qual plano inclui
Em todos os planos, no Windows e no Linux, em modo headed e headless.
Comparar planosPerguntas frequentes
O Playwright consegue carregar extensões do Chrome em modo headless?
Com o Clearcote, sim. Passe as pastas descompactadas como extensions para o launch() ou para um contexto persistente e elas carregam tanto em headless quanto em headed, sem flags extras.
O Manifest V2 ainda funciona?
Sim. O Chrome de fábrica já terminou de desativar o MV2, mas o conjunto de patches de privacidade do upstream, que é a base do Clearcote, traz o suporte de volta, então extensões MV2 e MV3 rodam lado a lado.
Posso instalar extensões pela Chrome Web Store?
Não. A integração com a Web Store foi removida junto com os outros serviços do Google. Baixe ou compile a extensão, descompacte se for um .crx e passe a pasta.
Por que a minha extensão não aparece?
Normalmente é o caminho: ele tem que apontar para a pasta que contém o manifest.json, e não para a pasta acima dela nem para um .crx. Se um content script nunca roda, confira se o padrão matches dele cobre a URL; http://localhost/* não casa com http://127.0.0.1:8080/.
Os sites conseguem saber que uma extensão está instalada?
Às vezes. Uma página pode perceber as mudanças que um content script faz no DOM e pode tentar buscar os recursos web-accessible que uma extensão declara. Isso vale para qualquer navegador com extensões, e o Clearcote não esconde isso.
Vá mais fundo na documentação
Recursos relacionados
Um Chromium drop-in para Playwright e Puppeteer: basta trocar um import em Python, Node ou .NET, e o navegador é baixado e verificado por SHA-256 para você.
Ative a opção e o Clearcote baixa o CDM Widevine do Google do mesmo jeito que o Chrome de fábrica, verifica e ativa, para que vídeos com DRM rodem.
Rode o Clearcote como endpoint CDP permanente pela imagem Docker oficial, pelo serve() ou por uma CLI, e conecte qualquer framework sem mudar o código.
Canvas, WebGL, WebGPU, áudio, fontes, tela e hardware derivados no motor C++ a partir de um único seed, com locale e fuso horário ajustados para combinar, para que todas as superfícies concordem entre si.
Leituras relacionadas
Experimente o Clearcote
Plug-and-play no Playwright e no Puppeteer, coerente até o handshake TLS, com um build de código aberto para começar.
Grátis para um navegador com GitHub. Sem cartão.