Cloudflare Turnstile
Aqui, vamos preencher um pequeno formulário de contato no site de teste tsmanaged.zlsupport.com e resolver um captcha Cloudflare Turnstile. Assim como nos tipos anteriores de captchas, precisamos descobrir a chave do site (sitekey) do captcha nas ferramentas de desenvolvedor do navegador.
- Vamos importar as dependências e escrever os valores:
import { launch } from 'puppeteer';
import { CapMonsterCloudClientFactory, ClientOptions, TurnstileProxylessRequest } from '@zennolab_com/capmonstercloud-client';
const CAPMONSTER_API_KEY = 'YOUR_API_KEY';
const WEBSITE_KEY = 'EXAMPLE_SITE_KEY';
const WEBSITE_URL = 'www.example.com';
- Vamos iniciar o navegador, criar uma tarefa para o CapMonster Cloud, enviá-la para o servidor, receber e inserir o resultado na página:
async function solveCloudflareTurnstileCaptcha() {
const browser = await launch({ headless: false });
const page = await browser.newPage();
// Initializing the CapMonster client
const cmcClient = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: CAPMONSTER_API_KEY }));
try {
await page.goto(WEBSITE_URL);
console.log('Page is open, solving Cloudflare Turnstile CAPTCHA...');
await page.type('#username', 'login');
await page.type('#password', 'pass');
const turnstileTaskRequest = new TurnstileProxylessRequest({
websiteURL: WEBSITE_URL,
websiteKey: WEBSITE_KEY,
});
// Getting a captcha solution from CapMonster
const solutionObject = await cmcClient.Solve(turnstileTaskRequest);
console.log('CapMonster Solution:', solutionObject);
const token = solutionObject.solution.token;
console.log('Captcha solved:', token);
// Inserting a token into the "token" field
await page.evaluate((extractedToken) => {
const tokenField = document.querySelector('#token');
if (tokenField) {
tokenField.value = extractedToken;
}
}, token);
console.log('Token inserted into the "token" field!');
// Click on the "Submit" button after inserting the token
await page.evaluate(() => {
const submitButton = document.querySelector('button[type="submit"]');
if (submitButton) {
submitButton.click();
}
});
console.log('Clicked on the "Submit" button after token insertion!');
await new Promise(resolve => setTimeout(resolve, 5000));
} catch (error) {
console.error('Error:', error);
} finally {
await browser.close();
}
}
solveCloudflareTurnstileCaptcha();
Explicação desta parte do código:
async function solveCloudflareTurnstileCaptcha() { ... }: Declarando uma função assíncrona solveCloudflareTurnstileCaptcha, que contém todo o código para resolver o CAPTCHA Cloudflare Turnstile.
const browser = await launch({ headless: false });: Iniciando o navegador usando o Puppeteer. A opção headless: false especifica que o navegador será iniciado com uma interface gráfica.
const page = await browser.newPage();: Criando uma nova aba (página) no navegador.
const cmcClient = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: CAPMONSTER_API_KEY }));: Inicializando o cliente CapMonster usando a chave de API fornecida.
await page.goto(WEBSITE_URL);: Acessando a página com o CAPTCHA Cloudflare Turnstile.
console.log('Page opened, solving Cloudflare Turnstile CAPTCHA...');: Exibindo uma mensagem no console indicando que a página foi aberta e que o processo de resolver o CAPTCHA Cloudflare Turnstile começou.
await page.type('#username', 'login');: Inserção de dados no campo "username".
await page.type('#password', 'pass');: Inserção de dados no campo "password".
const turnstileTaskRequest = new TurnstileProxylessRequest({ ... });: Criando um objeto de solicitação para a solução do CAPTCHA Turnstile. Definindo parâmetros como a URL do site e a chave do CAPTCHA Turnstile.
const solutionObject = await cmcClient.Solve(turnstileTaskRequest);: Enviando a solicitação ao CapMonster para a solução do CAPTCHA Turnstile. O resultado é salvo no solutionObject.
console.log('CapMonster Solution:', solutionObject);: Exibindo informações sobre a solução do CapMonster no console.
const token = solutionObject.solution.token;: Recuperando o token (resultado da solução) do solutionObject.
console.log('Captcha solved:', token);: Exibindo uma mensagem no console indicando que o CAPTCHA foi resolvido e mostrando o token.
await page.evaluate((extractedToken) => { ... }, token);: Inserindo o token no campo "token" em uma página da web usando o método evaluate do Puppeteer.
console.log('Token inserted into the "token" field!');: Exibindo uma mensagem no console indicando que o token foi inserido no campo "token".
await page.evaluate(() => { ... });: Clicando no botão "Submit" após inserir o token usando o método evaluate do Puppeteer.
console.log('Clicked on the "Submit" button after token insertion!');: Exibindo uma mensagem no console indicando que uma operação de clique foi realizada no botão "Submit" após inserir o token.
await new Promise(resolve => setTimeout(resolve, 5000));: Pausando por 5 segundos usando Promise.
} catch (error) { console.error('Error:', error); } finally { await browser.close(); }: Tratamento de erros (caso ocorram) com a exibição de uma mensagem de erro no console. Fechando o navegador no bloco finally para garantir que o processo seja concluído.
solveCloudflareTurnstileCaptcha();: Chamando a função solveCloudflareTurnstileCaptcha para completar todo o processo de resolução do CAPTCHA Cloudflare Turnstile.
Código Completo:
import { launch } from 'puppeteer';
import { CapMonsterCloudClientFactory, ClientOptions, TurnstileProxylessRequest } from '@zennolab_com/capmonstercloud-client';
const CAPMONSTER_API_KEY = 'YOUR_API_KEY';
const WEBSITE_KEY = 'EXAMPLE_SITE_KEY';
const WEBSITE_URL = 'www.example.com';
async function solveCloudflareTurnstileCaptcha() {
const browser = await launch({ headless: false });
const page = await browser.newPage();
// Initializing the CapMonster client
const cmcClient = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: CAPMONSTER_API_KEY }));
try {
await page.goto(WEBSITE_URL);
console.log('Page opened, solving Cloudflare Turnstile CAPTCHA...');
await page.type('#username', 'login');
await page.type('#password', 'pass');
const turnstileTaskRequest = new TurnstileProxylessRequest({
websiteURL: WEBSITE_URL,
websiteKey: WEBSITE_KEY,
});
// Getting a captcha solution from CapMonster
const solutionObject = await cmcClient.Solve(turnstileTaskRequest);
console.log('CapMonster Solution:', solutionObject);
const token = solutionObject.solution.token;
console.log('Captcha solved:', token);
// Inserting a token into the "token" field
await page.evaluate((extractedToken) => {
const tokenField = document.querySelector('#token');
if (tokenField) {
tokenField.value = extractedToken;
}
}, token);
console.log('Token inserted into the "token" field!');
// Click on the "Submit" button after inserting the token
await page.evaluate(() => {
const submitButton = document.querySelector('button[type="submit"]');
if (submitButton) {
submitButton.click();
}
});
console.log('Clicked on the "Submit" button after token insertion!');
await new Promise(resolve => setTimeout(resolve, 5000));
} catch (error) {
console.error('Error:', error);
} finally {
await browser.close();
}
}
solveCloudflareTurnstileCaptcha();
- Vamos executar o código. Se tudo estiver correto, o código resolverá o CAPTCHA e abrirá uma página de confirmação.