Estratégias para contornar a proteção do Cloudflare com o Puppeteer
Aprenda técnicas eficazes para contornar as proteções do Cloudflare de forma ética usando o Puppeteer, incluindo gerenciamento de proxy e simulação de comportamento humano.

CloudflareAs medidas de segurança do dificultam o acesso de bots aos sites. Mas com Marionetista, você pode contornar essas defesas se feito eticamente. Aqui está um guia rápido para começar:
Técnicas básicas:
- Uso proxies residenciais e girá-los para evitar a detecção.
- Imitar o comportamento humano com atrasos aleatórios e movimentos do mouse.
- Handle Desafios do JavaScript e CAPTCHA usando plugins como
puppeteer-extra-plugin-recaptcha. - Disfarce a automação com ajustes impressões digitais do navegador e agentes do usuário.
Configuração do marionetista:
Instalar o Puppeteer e plugins:
npm install puppeteer puppeteer-extra puppeteer-extra-plugin-stealthAdicione configurações de stealth para evitar detecção:
<span class="hljs-keyword">const</span> puppeteer = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra'</span>); <span class="hljs-keyword">const</span> <span class="hljs-title class_">StealthPlugin</span> = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra-plugin-stealth'</span>); puppeteer.<span class="hljs-title function_">use</span>(<span class="hljs-title class_">StealthPlugin</span>());
Lembrete legal: Respeite sempre os termos de serviço do site, evite sobrecarregar servidores e use a automação com responsabilidade.
Essas etapas podem melhorar sua taxa de sucesso contra as proteções da Cloudflare. Mergulhe no artigo para obter trechos de código detalhados e técnicas avançadas.
Nodejs Marionetista Tutorial nº 7 - Detecção de bypass usando ...
Guia de configuração do marionetista
Siga estas etapas para configurar o Puppeteer com configurações e plugins personalizados para navegar pelas proteções do Cloudflare.
Etapas básicas de instalação do Puppeteer
Primeiro, certifique-se de ter Node.js v18 ou mais recente instalado. Então, execute o seguinte comando para instalar o Puppeteer e seus plugins relacionados:
npm install puppeteer puppeteer-extra puppeteer-extra-plugin-stealth
Em seguida, crie um novo arquivo JavaScript e importe os módulos necessários:
<span class="hljs-keyword">const</span> puppeteer = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra'</span>);
<span class="hljs-keyword">const</span> <span class="hljs-title class_">StealthPlugin</span> = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra-plugin-stealth'</span>);
puppeteer.<span class="hljs-title function_">use</span>(<span class="hljs-title class_">StealthPlugin</span>());
Depois disso, você precisará ajustar as configurações de inicialização do navegador para evitar a detecção.
Configurações necessárias do marionetista
Configure sua instância do navegador com configurações que diminuam a chance de ser sinalizado:
<span class="hljs-keyword">const</span> browser = <span class="hljs-keyword">await</span> puppeteer.<span class="hljs-title function_">launch</span>({
<span class="hljs-attr">headless</span>: <span class="hljs-literal">false</span>,
<span class="hljs-attr">args</span>: [
<span class="hljs-string">'--no-sandbox'</span>,
<span class="hljs-string">'--disable-setuid-sandbox'</span>,
<span class="hljs-string">'--disable-infobars'</span>,
<span class="hljs-string">'--window-position=0,0'</span>,
<span class="hljs-string">'--ignore-certificate-errors'</span>,
<span class="hljs-string">'--ignore-certificate-errors-spki-list'</span>
]
});
Se você quiser usar um proxy para mascarar seu IP, inclua estas configurações adicionais:
<span class="hljs-keyword">const</span> browser = <span class="hljs-keyword">await</span> puppeteer.<span class="hljs-title function_">launch</span>({
<span class="hljs-attr">args</span>: [
<span class="hljs-string">'--proxy-server=http://proxy-address:port'</span>
]
});
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">authenticate</span>({
<span class="hljs-attr">username</span>: <span class="hljs-string">'proxy-username'</span>,
<span class="hljs-attr">password</span>: <span class="hljs-string">'proxy-password'</span>
});
Complementos úteis para o Puppeteer
Aumente a funcionalidade do Puppeteer com estes plugins:
| Nome Plugin | Propósito | Principais funcionalidades |
|---|---|---|
| marionetista-extra-plugin-stealth | Anti-detecção | Modifica a impressão digital do navegador e imita o comportamento humano |
| puppeteer-extra-plugin-recaptcha | Manipulação de CAPTCHA | Automatiza a resolução de CAPTCHA |
| titereiro-extra-plugin-adblocker | Gestão de recursos | Bloqueia anúncios e rastreadores para reduzir riscos de detecção |
Para integrar esses complementos, use o seguinte código:
<span class="hljs-keyword">const</span> puppeteer = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra'</span>);
<span class="hljs-keyword">const</span> <span class="hljs-title class_">StealthPlugin</span> = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra-plugin-stealth'</span>);
<span class="hljs-keyword">const</span> <span class="hljs-title class_">AdblockerPlugin</span> = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra-plugin-adblocker'</span>);
puppeteer.<span class="hljs-title function_">use</span>(<span class="hljs-title class_">StealthPlugin</span>());
puppeteer.<span class="hljs-title function_">use</span>(<span class="hljs-title class_">AdblockerPlugin</span>({ <span class="hljs-attr">blockTrackers</span>: <span class="hljs-literal">true</span> }));
Por fim, para fazer com que suas ações pareçam mais naturais, introduza atrasos aleatórios entre elas:
<span class="hljs-keyword">const</span> <span class="hljs-title function_">delay</span> = ms => <span class="hljs-keyword">new</span> <span class="hljs-title class_">Promise</span>(<span class="hljs-function"><span class="hljs-params">resolve</span> =></span> <span class="hljs-built_in">setTimeout</span>(resolve, ms));
<span class="hljs-keyword">await</span> <span class="hljs-title function_">delay</span>(<span class="hljs-title class_">Math</span>.<span class="hljs-title function_">random</span>() * <span class="hljs-number">1000</span> + <span class="hljs-number">1000</span>); <span class="hljs-comment">// Random delay between 1-2 seconds</span>
sbb-itb-23997f1
Métodos para lidar Cloudflare Total
Melhore sua configuração do Puppeteer com essas técnicas para navegar melhor pelas defesas do Cloudflare.
Gerenciamento de identidade do navegador
O sistema anti-bot da Cloudflare monitora as impressões digitais do navegador e os sinais de automação. Para disfarçar a atividade do Puppeteer, ajuste os identificadores e propriedades do navegador conforme mostrado abaixo:
<span class="hljs-keyword">const</span> browser = <span class="hljs-keyword">await</span> puppeteer.<span class="hljs-title function_">launch</span>({
<span class="hljs-attr">args</span>: [
<span class="hljs-string">'--window-size=1920,1080'</span>,
<span class="hljs-string">'--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'</span>
],
<span class="hljs-attr">ignoreDefaultArgs</span>: [<span class="hljs-string">'--enable-automation'</span>]
});
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">evaluateOnNewDocument</span>(<span class="hljs-function">() =></span> {
<span class="hljs-keyword">delete</span> navigator.<span class="hljs-property">webdriver</span>;
<span class="hljs-title class_">Object</span>.<span class="hljs-title function_">defineProperty</span>(navigator, <span class="hljs-string">'plugins'</span>, {
<span class="hljs-attr">get</span>: <span class="hljs-function">() =></span> [<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">4</span>, <span class="hljs-number">5</span>]
});
});
Essa configuração remove indicadores de automação e imita uma impressão digital padrão do navegador, ajudando a ignorar as verificações do Cloudflare.
Soluções de Desafios JavaScript
Lidar com os desafios de JavaScript do Cloudflare requer simular comportamento humano. Por exemplo, você pode esperar o formulário de desafio desaparecer e introduzir atrasos aleatórios entre as ações:
<span class="hljs-comment">// Wait until the Cloudflare challenge form is gone</span>
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">waitForFunction</span>(<span class="hljs-function">() =></span> {
<span class="hljs-keyword">return</span> <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">querySelector</span>(<span class="hljs-string">'#challenge-form'</span>) === <span class="hljs-literal">null</span>;
}, { <span class="hljs-attr">timeout</span>: <span class="hljs-number">30000</span> });
<span class="hljs-comment">// Add random delays to simulate human interaction</span>
<span class="hljs-keyword">const</span> <span class="hljs-title function_">randomDelay</span> = (<span class="hljs-params">min, max</span>) => {
<span class="hljs-keyword">return</span> <span class="hljs-title class_">Math</span>.<span class="hljs-title function_">floor</span>(<span class="hljs-title class_">Math</span>.<span class="hljs-title function_">random</span>() * (max - min + <span class="hljs-number">1</span>) + min);
};
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">waitForTimeout</span>(<span class="hljs-title function_">randomDelay</span>(<span class="hljs-number">1000</span>, <span class="hljs-number">3000</span>));
Você também pode criar manipuladores personalizados para imitar melhor o comportamento do usuário, conforme necessário. Em seguida, você precisará de uma estratégia para lidar com CAPTCHAs.
Opções de gerenciamento de CAPTCHA
Ao lidar com CAPTCHAs, usar um plugin de resolução de CAPTCHA pode simplificar o processo:
<span class="hljs-keyword">const</span> <span class="hljs-title class_">RecaptchaPlugin</span> = <span class="hljs-built_in">require</span>(<span class="hljs-string">'puppeteer-extra-plugin-recaptcha'</span>);
puppeteer.<span class="hljs-title function_">use</span>(
<span class="hljs-title class_">RecaptchaPlugin</span>({
<span class="hljs-attr">provider</span>: {
<span class="hljs-attr">id</span>: <span class="hljs-string">'2captcha'</span>,
<span class="hljs-attr">token</span>: <span class="hljs-string">'your-api-key'</span>
}
})
);
Se o plugin não resolver o CAPTCHA, você pode alternar para a rotação de proxy como alternativa:
<span class="hljs-keyword">try</span> {
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">solveRecaptchas</span>();
} <span class="hljs-keyword">catch</span> (e) {
<span class="hljs-comment">// Rotate to a new proxy if CAPTCHA solving fails</span>
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">setRequestInterception</span>(<span class="hljs-literal">true</span>);
<span class="hljs-keyword">await</span> <span class="hljs-title function_">useNextProxy</span>();
}
Esses métodos ajudam você a superar os desafios do CAPTCHA e manter o acesso, mesmo quando as ferramentas de automação encontram obstáculos.
Dicas e diretrizes de confiabilidade
Implementar técnicas confiáveis é essencial para garantir o sucesso na automação.
Configuração e uso de proxy
Usar proxies bem gerenciados pode ajudar a reduzir significativamente os riscos de detecção. Por exemplo, proxies residenciais premium oferecem melhores capacidades de bypass. Aqui está um exemplo de configuração:
<span class="hljs-keyword">const</span> browser = <span class="hljs-keyword">await</span> puppeteer.<span class="hljs-title function_">launch</span>({
<span class="hljs-attr">args</span>: [
<span class="hljs-string">`--proxy-server=<span class="hljs-subst">${proxyAddress}</span>`</span>,
<span class="hljs-string">'--no-sandbox'</span>,
<span class="hljs-string">'--disable-setuid-sandbox'</span>
]
});
<span class="hljs-comment">// Handle proxy authentication</span>
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">setRequestInterception</span>(<span class="hljs-literal">true</span>);
page.<span class="hljs-title function_">on</span>(<span class="hljs-string">'request'</span>, <span class="hljs-function"><span class="hljs-params">request</span> =></span> {
request.<span class="hljs-title function_">continue</span>({
<span class="hljs-attr">headers</span>: {
...request.<span class="hljs-title function_">headers</span>(),
<span class="hljs-string">'Proxy-Authorization'</span>: <span class="hljs-string">`Basic <span class="hljs-subst">${Buffer.<span class="hljs-keyword">from</span>(
<span class="hljs-string">`<span class="hljs-subst">${proxyUsername}</span>:<span class="hljs-subst">${proxyPassword}</span>`</span>
).toString(<span class="hljs-string">'base64'</span>)}</span>`</span>
}
});
});
A rotação regular de proxies também ajuda a manter o acesso ininterrupto:
<span class="hljs-keyword">const</span> proxyList = [
<span class="hljs-string">'proxy1.example.com:8080'</span>,
<span class="hljs-string">'proxy2.example.com:8080'</span>,
<span class="hljs-string">'proxy3.example.com:8080'</span>
];
<span class="hljs-keyword">function</span> <span class="hljs-title function_">getNextProxy</span>(<span class="hljs-params"></span>) {
<span class="hljs-keyword">const</span> proxy = proxyList.<span class="hljs-title function_">shift</span>();
proxyList.<span class="hljs-title function_">push</span>(proxy);
<span class="hljs-keyword">return</span> proxy;
}
Solicitar controle de tempo
Simular comportamento semelhante ao humano pode minimizar riscos de detecção. Veja como você pode gerenciar o tempo de solicitação de forma eficaz:
<span class="hljs-keyword">const</span> <span class="hljs-title function_">simulateHumanBehavior</span> = <span class="hljs-keyword">async</span> (<span class="hljs-params">page</span>) => {
<span class="hljs-comment">// Add random mouse movements</span>
<span class="hljs-keyword">await</span> page.<span class="hljs-property">mouse</span>.<span class="hljs-title function_">move</span>(<span class="hljs-number">100</span>, <span class="hljs-number">200</span>);
<span class="hljs-keyword">await</span> page.<span class="hljs-property">mouse</span>.<span class="hljs-title function_">move</span>(<span class="hljs-number">150</span>, <span class="hljs-number">250</span>, { <span class="hljs-attr">steps</span>: <span class="hljs-number">10</span> });
<span class="hljs-comment">// Randomize typing speed</span>
<span class="hljs-keyword">await</span> page.<span class="hljs-property">keyboard</span>.<span class="hljs-title function_">type</span>(<span class="hljs-string">'Hello World'</span>, {
<span class="hljs-attr">delay</span>: <span class="hljs-title class_">Math</span>.<span class="hljs-title function_">floor</span>(<span class="hljs-title class_">Math</span>.<span class="hljs-title function_">random</span>() * (<span class="hljs-number">150</span> - <span class="hljs-number">50</span>) + <span class="hljs-number">50</span>)
});
<span class="hljs-comment">// Add pauses</span>
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">waitForTimeout</span>(
<span class="hljs-title class_">Math</span>.<span class="hljs-title function_">floor</span>(<span class="hljs-title class_">Math</span>.<span class="hljs-title function_">random</span>() * (<span class="hljs-number">3000</span> - <span class="hljs-number">1000</span>) + <span class="hljs-number">1000</span>)
);
};
Essas técnicas, combinadas com o tratamento adequado da sessão, tornam os esforços de automação mais confiáveis.
Gerenciamento de cookies e sessões
Gerenciar cookies de forma eficaz é crucial para manter a continuidade da sessão. Veja como você pode armazenar e restaurar sessões:
<span class="hljs-comment">// Store successful session cookies</span>
<span class="hljs-keyword">const</span> <span class="hljs-title function_">storeCookies</span> = <span class="hljs-keyword">async</span> (<span class="hljs-params">page</span>) => {
<span class="hljs-keyword">const</span> cookies = <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">cookies</span>();
<span class="hljs-keyword">await</span> fs.<span class="hljs-title function_">writeFile</span>(
<span class="hljs-string">'cookies.json'</span>,
<span class="hljs-title class_">JSON</span>.<span class="hljs-title function_">stringify</span>(cookies, <span class="hljs-literal">null</span>, <span class="hljs-number">2</span>)
);
};
<span class="hljs-comment">// Restore previous session</span>
<span class="hljs-keyword">const</span> <span class="hljs-title function_">loadCookies</span> = <span class="hljs-keyword">async</span> (<span class="hljs-params">page</span>) => {
<span class="hljs-keyword">try</span> {
<span class="hljs-keyword">const</span> cookiesString = <span class="hljs-keyword">await</span> fs.<span class="hljs-title function_">readFile</span>(<span class="hljs-string">'cookies.json'</span>);
<span class="hljs-keyword">const</span> cookies = <span class="hljs-title class_">JSON</span>.<span class="hljs-title function_">parse</span>(cookiesString);
<span class="hljs-keyword">await</span> page.<span class="hljs-title function_">setCookie</span>(...cookies);
} <span class="hljs-keyword">catch</span> (error) {
<span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">'No stored cookies found'</span>);
}
};
Se os cookies falharem na validação, você pode atualizá-los automaticamente:
<span class="hljs-keyword">const</span> <span class="hljs-title function_">validateCookies</span> = <span class="hljs-keyword">async</span> (<span class="hljs-params">page</span>) => {
<span class="hljs-keyword">const</span> response = <span class="hljs-keyword">await</span> page.<span class="hljs-title function_">goto</span>(targetUrl);
<span class="hljs-keyword">if</span> (response.<span class="hljs-title function_">status</span>() === <span class="hljs-number">403</span>) {
<span class="hljs-keyword">await</span> <span class="hljs-title function_">clearCookies</span>(page);
<span class="hljs-keyword">await</span> <span class="hljs-title function_">initializeNewSession</span>(page);
}
};
Conclusão
Vamos encerrar destacando as principais técnicas e etapas que abordamos.
Recapitulação das técnicas principais
Passar pela proteção do Cloudflare requer uma mistura de métodos trabalhando juntos. As estratégias mais importantes incluem:
- Usando proxies residenciais com rotação adequada
- Gerenciando impressões digitais do navegador e agentes do usuário
- Manipulando cookies e sessões de forma eficaz
- Imitando o comportamento humano com atrasos aleatórios
- Definindo cabeçalhos de solicitação precisos
- Gerenciando a autenticação corretamente
De acordo com dados do setor, a combinação dessas técnicas pode levar a taxas de sucesso de até 98.7% quando as condições são otimizadas .
Ao se concentrar nesses métodos principais, você pode criar um processo de automação confiável e compatível.
Etapas para implementação
Aqui estão algumas dicas finais para refinar sua configuração do Puppeteer e seus esforços para ignorar o Cloudflare:
- Comece com as configurações básicas do Puppeteer
- Gire os proxies cuidadosamente
- Estabeleça mecanismos fortes de tratamento de erros
- Verifique os termos de serviço do site de destino antes de começar
- Mantenha as taxas de solicitação moderadas para evitar o acionamento de defesas
- Documente seus fluxos de trabalho de automação
O Puppeteer requer configuração cuidadosa e ajustes regulares para permanecer eficaz contra as defesas em evolução do Cloudflare. À medida que as medidas de segurança se tornam mais avançadas, o sucesso dependerá de atualizações contínuas em sua estratégia e adesão estrita às práticas éticas. Embora as configurações iniciais possam funcionar bem, manter o desempenho a longo prazo significa permanecer flexível e seguir diretrizes claras.
Artigos Relacionados
- Como funciona a detecção de navegador sem cabeça e como ignorá-la
- Configuração de proxy no Puppeteer: técnicas de autenticação, rotação e bypass
- Gerenciando a impressão digital do navegador no Puppeteer para evitar a detecção
- Superando CAPTCHA em scripts de Puppeteer: do reCAPTCHA aos serviços de reconhecimento



