Resolvendo o Erro 'SELF_SIGNED_CERT_IN_CHAIN' no Playwright (Windows)
Entendendo o Conceito
O comando playwright install utiliza o Node.js por trás dos panos para realizar o download dos navegadores (Chromium, Firefox e WebKit).
Em redes corporativas, é comum que firewalls e sistemas de segurança interceptem as conexões HTTPS e injetem um certificado interno próprio na cadeia de certificação. Como o Node.js não reconhece esse certificado de fábrica, ele bloqueia a conexão e o download não acontece.
Abaixo, três alternativas para contornar o problema diretamente no terminal (VS Code ou Prompt de Comando), com o ambiente virtual devidamente ativado.
Passo a Passo
Alternativa 1 - Ignorar a verificação de certificado (mais rápida)
Criar a variável de ambiente temporária (PowerShell):
$env:NODE_TLS_REJECT_UNAUTHORIZED="0"
Ou, caso esteja utilizando o Prompt de Comando (CMD):
set NODE_TLS_REJECT_UNAUTHORIZED=0
Executar o download dos navegadores:
playwright install
- Explicando o código:
- A variável instrui o Node.js a não rejeitar certificados não reconhecidos;
- A configuração é temporária: ao fechar o terminal, a variável é descartada automaticamente.
Alternativa 2 - Confiar no certificado corporativo (mais segura)
Obter com o time de segurança/infra o certificado root da empresa (arquivos
.pem,.crtou.cer);Apontar a variável para o arquivo (PowerShell):
$env:NODE_EXTRA_CA_CERTS="C:\caminho\para\o\certificado.pem"
Executar a instalação:
playwright install
Alternativa 3 - Configurar proxy explícito
Configurar a variável de proxy (PowerShell):
$env:HTTPS_PROXY="http://seu-proxy-da-empresa:porta"
Executar a instalação:
playwright install
No Código Python
Mesmo com os navegadores instalados, o script também precisa ser configurado para não travar ao acessar sites dentro da rede corporativa:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
context = browser.new_context(ignore_https_errors=True)
page = context.new_page()
page.goto("https://seu-site-interno.com")
- Explicando o código:
sync_playwright()abre e gerencia o ciclo de vida da automação, garantindo o encerramento correto;headless=Falseexecuta o navegador de forma visível (útil para depuração);ignore_https_errors=Trueimpede que o navegador trave ao encontrar os certificados da rede interna.
Observações
As variáveis de ambiente criadas no terminal duram apenas naquela sessão. Configurar no PowerShell e executar o comando em outra janela (ou no CMD) não funciona, pois as configurações não são herdadas;
Caso o caminho até o certificado contenha espaços (Ex.:
C:\Meus Documentos\cert.pem), manter o caminho completo envolvido em aspas duplas;Se o terminal informar que o comando
playwrightnão existe, verificar se o ambiente virtual está ativado (o nome dele deve aparecer entre parênteses no início da linha de comandos) antes de suspeitar do certificado.
Referências
- Documentação oficial do Playwright - Instalação de Navegadores;
- Documentação oficial do Node.js - Variável
NODE_TLS_REJECT_UNAUTHORIZED; - Documentação oficial do Node.js - Variável
NODE_EXTRA_CA_CERTS.
#playwright #ssl #proxy #windows #automation