cf-solver / test-autz-signup.js
Samuel
update
15f7aec
const { connect } = require('puppeteer-real-browser');
async function createAutzAccount() {
console.log('Launching browser...');
const { browser, page } = await connect({
headless: 'auto',
args: ['--no-sandbox', '--disable-setuid-sandbox'],
turnstile: true
});
let tempEmail = null;
let tmailorPage = null;
try {
console.log('\n=== STEP 1: Get Temp Email from tmailor.com ===');
await page.goto('https://tmailor.com', {
waitUntil: 'networkidle2',
timeout: 60000
});
await new Promise(resolve => setTimeout(resolve, 3000));
const buttons = await page.$$('button, a');
for (const btn of buttons) {
const text = await page.evaluate(el => el.textContent, btn);
if (text && text.includes('New Email')) {
console.log('Clicking New Email button...');
await btn.click();
await new Promise(resolve => setTimeout(resolve, 3000));
break;
}
}
const emailInput = await page.$('input[readonly]');
if (emailInput) {
tempEmail = await page.evaluate(el => el.value, emailInput);
console.log('Got temp email:', tempEmail);
}
if (!tempEmail || !tempEmail.includes('@')) {
throw new Error('Could not get temp email from tmailor');
}
tmailorPage = page;
console.log('\n=== STEP 2: Navigate to Autz.org ===');
const autzPage = await browser.newPage();
await autzPage.goto('https://autz.org/onboarding/qinw2ix?callback_url=https%3A%2F%2Fmy.zone.id%2F', {
waitUntil: 'networkidle2',
timeout: 60000
});
console.log('Page loaded, waiting for content...');
await new Promise(resolve => setTimeout(resolve, 3000));
await autzPage.screenshot({ path: 'autz-step1.png', fullPage: true });
console.log('Screenshot saved: autz-step1.png');
const pageText = await autzPage.evaluate(() => document.body.innerText);
console.log('\n--- Page content (first 1000 chars) ---');
console.log(pageText.substring(0, 1000));
console.log('\n=== STEP 3: Look for email input field ===');
const emailSelectors = [
'input[type="email"]',
'input[name="email"]',
'input[placeholder*="email" i]',
'input[id*="email" i]',
'input[type="text"]'
];
let emailField = null;
for (const selector of emailSelectors) {
emailField = await autzPage.$(selector);
if (emailField) {
console.log(`Found email field with selector: ${selector}`);
break;
}
}
if (emailField) {
console.log(`Entering email: ${tempEmail}`);
await emailField.click();
await emailField.type(tempEmail, { delay: 50 });
await new Promise(resolve => setTimeout(resolve, 1000));
} else {
console.log('No email field found on page');
}
console.log('\n=== STEP 4: Wait for Turnstile captcha ===');
console.log('Looking for Turnstile iframe...');
await new Promise(resolve => setTimeout(resolve, 2000));
const frames = autzPage.frames();
console.log(`Found ${frames.length} frames`);
for (const frame of frames) {
const url = frame.url();
console.log('Frame:', url);
if (url.includes('turnstile') || url.includes('challenges')) {
console.log('Found Turnstile frame! Waiting for it to solve...');
await new Promise(resolve => setTimeout(resolve, 5000));
}
}
console.log('Waiting for captcha to auto-solve...');
let captchaSolved = false;
for (let i = 0; i < 30; i++) {
await new Promise(resolve => setTimeout(resolve, 1000));
const html = await autzPage.content();
if (html.includes('Success') || html.includes('success') || html.includes('cf-turnstile-success')) {
console.log('Captcha solved!');
captchaSolved = true;
await new Promise(resolve => setTimeout(resolve, 2000));
break;
}
if (i % 5 === 0) {
console.log(`Waiting for captcha... ${i + 1}/30`);
}
}
if (!captchaSolved) {
console.log('Captcha may not be fully solved, trying anyway...');
}
await autzPage.screenshot({ path: 'autz-step2.png', fullPage: true });
console.log('Screenshot saved: autz-step2.png');
console.log('\n=== STEP 5: Click Continue button ===');
const continueBtn = await autzPage.$('button');
const allContinueBtns = await autzPage.$$('button');
for (const btn of allContinueBtns) {
const text = await autzPage.evaluate(el => el.textContent, btn);
if (text && text.includes('Continue')) {
console.log('Found Continue button, clicking with mouse simulation...');
const box = await btn.boundingBox();
if (box) {
await autzPage.mouse.click(box.x + box.width / 2, box.y + box.height / 2);
console.log('Clicked at', box.x + box.width / 2, box.y + box.height / 2);
} else {
await btn.click();
}
break;
}
}
console.log('Waiting for page content to change...');
for (let i = 0; i < 10; i++) {
await new Promise(resolve => setTimeout(resolve, 1000));
const text = await autzPage.evaluate(() => document.body.innerText);
if (text.includes('Password') || text.includes('password')) {
console.log('Registration form detected!');
break;
}
console.log(`Waiting... ${i + 1}/10`);
}
await new Promise(resolve => setTimeout(resolve, 2000));
await autzPage.screenshot({ path: 'autz-step3.png', fullPage: true });
console.log('Screenshot saved: autz-step3.png');
let pageText2 = await autzPage.evaluate(() => document.body.innerText);
console.log('\n--- Page after Continue (first 1000 chars) ---');
console.log(pageText2.substring(0, 1000));
const currentUrl = autzPage.url();
console.log('Current URL:', currentUrl);
if (pageText2.toLowerCase().includes('password') && pageText2.toLowerCase().includes('name')) {
console.log('\n=== STEP 6: Fill out registration form ===');
const passwordField = await autzPage.$('input[type="password"], input[name="password"], input[placeholder*="password" i]');
if (passwordField) {
const password = 'TestPass123!';
console.log('Entering password...');
await passwordField.click();
await passwordField.type(password, { delay: 30 });
}
const allInputs = await autzPage.$$('input');
console.log(`Found ${allInputs.length} input fields`);
for (const input of allInputs) {
const inputType = await autzPage.evaluate(el => el.type, input);
const inputName = await autzPage.evaluate(el => el.name || el.placeholder || '', input);
const inputValue = await autzPage.evaluate(el => el.value, input);
console.log(`Input: type=${inputType}, name/placeholder=${inputName}, value=${inputValue?.substring(0, 20)}`);
if (inputName.toLowerCase().includes('name') && !inputName.toLowerCase().includes('email') && !inputValue) {
console.log('Entering name...');
await input.click();
await input.type('Test User', { delay: 30 });
}
if ((inputType === 'tel' || inputName.toLowerCase().includes('phone')) && !inputValue) {
console.log('Entering phone...');
await input.click();
await input.type('+12025551234', { delay: 30 });
}
}
await autzPage.screenshot({ path: 'autz-step4-form.png', fullPage: true });
console.log('Screenshot saved: autz-step4-form.png');
console.log('Looking for Create Account button...');
const createBtn = await autzPage.$('button');
const allBtns = await autzPage.$$('button');
for (const btn of allBtns) {
const text = await autzPage.evaluate(el => el.textContent, btn);
if (text && (text.includes('Create Account') || text.includes('Register') || text.includes('Sign Up'))) {
console.log('Clicking Create Account button...');
await btn.click();
await new Promise(resolve => setTimeout(resolve, 5000));
break;
}
}
await autzPage.screenshot({ path: 'autz-step5-after-register.png', fullPage: true });
console.log('Screenshot saved: autz-step5-after-register.png');
const finalText = await autzPage.evaluate(() => document.body.innerText);
console.log('\n--- Page after registration (first 1000 chars) ---');
console.log(finalText.substring(0, 1000));
}
if (pageText2.toLowerCase().includes('code') || pageText2.toLowerCase().includes('verify') || pageText2.toLowerCase().includes('otp') || pageText2.toLowerCase().includes('sent') || pageText2.toLowerCase().includes('check your email')) {
console.log('\nVerification code requested! Need to check email...');
}
console.log('\n=== STEP 7: Check tmailor inbox for verification email ===');
await tmailorPage.bringToFront();
for (let attempt = 1; attempt <= 5; attempt++) {
console.log(`\nChecking inbox, attempt ${attempt}/5...`);
const refreshBtns = await tmailorPage.$$('button, a');
for (const btn of refreshBtns) {
const text = await tmailorPage.evaluate(el => el.textContent, btn);
if (text && (text.includes('Refresh') || text.includes('refresh'))) {
await btn.click();
await new Promise(resolve => setTimeout(resolve, 3000));
break;
}
}
const inboxText = await tmailorPage.evaluate(() => document.body.innerText);
if (inboxText.toLowerCase().includes('autz') ||
inboxText.toLowerCase().includes('verify') ||
inboxText.toLowerCase().includes('zone')) {
console.log('Found verification email!');
const emailLinks = await tmailorPage.$$('a, tr, div[class*="mail"], div[class*="message"]');
for (const link of emailLinks) {
const linkText = await tmailorPage.evaluate(el => el.textContent, link);
if (linkText && (linkText.toLowerCase().includes('autz') ||
linkText.toLowerCase().includes('verify') ||
linkText.toLowerCase().includes('zone'))) {
console.log('Clicking on email...');
await link.click();
await new Promise(resolve => setTimeout(resolve, 3000));
break;
}
}
break;
}
await new Promise(resolve => setTimeout(resolve, 5000));
}
await tmailorPage.screenshot({ path: 'tmailor-inbox.png', fullPage: true });
console.log('Screenshot saved: tmailor-inbox.png');
console.log('\n=== FINAL STATUS ===');
console.log('Temp Email Used:', tempEmail);
console.log('Check the screenshots to see the current state');
} catch (error) {
console.error('Error:', error.message);
await page.screenshot({ path: 'error-screenshot.png', fullPage: true });
} finally {
await browser.close();
console.log('\nBrowser closed.');
}
}
createAutzAccount();