| const { connect } = require('puppeteer-real-browser'); | |
| async function getTempMail() { | |
| console.log('Launching browser...'); | |
| const { browser, page } = await connect({ | |
| headless: 'auto', | |
| args: ['--no-sandbox', '--disable-setuid-sandbox'], | |
| turnstile: true | |
| }); | |
| try { | |
| console.log('Navigating to tmailor.com...'); | |
| await page.goto('https://tmailor.com', { | |
| waitUntil: 'networkidle2', | |
| timeout: 60000 | |
| }); | |
| console.log('Initial page load complete. Waiting...'); | |
| await new Promise(resolve => setTimeout(resolve, 3000)); | |
| console.log('Looking for Turnstile iframe to solve...'); | |
| async function solveTurnstile() { | |
| const frames = page.frames(); | |
| for (const frame of frames) { | |
| const url = frame.url(); | |
| console.log('Frame URL:', url); | |
| if (url.includes('turnstile') || url.includes('challenges.cloudflare')) { | |
| console.log('Found Turnstile challenge frame!'); | |
| try { | |
| await new Promise(resolve => setTimeout(resolve, 2000)); | |
| const checkbox = await frame.$('input[type="checkbox"]'); | |
| if (checkbox) { | |
| console.log('Clicking Turnstile checkbox...'); | |
| await checkbox.click(); | |
| return true; | |
| } | |
| const verifyButton = await frame.$('[id*="verify"], [class*="verify"], button'); | |
| if (verifyButton) { | |
| console.log('Clicking verify button in frame...'); | |
| await verifyButton.click(); | |
| return true; | |
| } | |
| } catch (e) { | |
| console.log('Error in Turnstile frame:', e.message); | |
| } | |
| } | |
| } | |
| return false; | |
| } | |
| let turnstileSolved = await solveTurnstile(); | |
| if (turnstileSolved) { | |
| console.log('Turnstile interaction attempted, waiting for verification...'); | |
| await new Promise(resolve => setTimeout(resolve, 8000)); | |
| } | |
| console.log('Checking for Confirm link on page...'); | |
| const confirmButtons = await page.$$('a[title*="verify"], a[href*="firewall"], button'); | |
| for (const btn of confirmButtons) { | |
| const text = await page.evaluate(el => el.textContent, btn); | |
| if (text && text.toLowerCase().includes('confirm')) { | |
| console.log('Found Confirm button, clicking...'); | |
| await btn.click(); | |
| await new Promise(resolve => setTimeout(resolve, 5000)); | |
| turnstileSolved = await solveTurnstile(); | |
| if (turnstileSolved) { | |
| await new Promise(resolve => setTimeout(resolve, 8000)); | |
| } | |
| break; | |
| } | |
| } | |
| console.log('Looking for New Email button...'); | |
| 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('Found New Email button, clicking...'); | |
| await btn.click(); | |
| await new Promise(resolve => setTimeout(resolve, 3000)); | |
| break; | |
| } | |
| } | |
| console.log('Waiting for email to appear...'); | |
| await new Promise(resolve => setTimeout(resolve, 5000)); | |
| let email = null; | |
| console.log('Searching for email in page...'); | |
| const allText = await page.evaluate(() => document.body.innerText); | |
| const emailPatterns = allText.match(/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g); | |
| if (emailPatterns) { | |
| const filtered = emailPatterns.filter(e => | |
| !e.includes('gmail.com') && | |
| !e.includes('tmailor.com@') && | |
| !e.toLowerCase().includes('support') | |
| ); | |
| if (filtered.length > 0) { | |
| email = filtered[0]; | |
| console.log('Found email in page text:', email); | |
| } | |
| } | |
| if (!email) { | |
| const emailSelectors = [ | |
| '#email', | |
| '#tempmail', | |
| '.email-address', | |
| '[data-email]', | |
| 'input[readonly]', | |
| 'input[type="text"]', | |
| '.copy-text', | |
| 'code', | |
| 'pre' | |
| ]; | |
| for (const selector of emailSelectors) { | |
| try { | |
| const elements = await page.$$(selector); | |
| for (const element of elements) { | |
| const value = await page.evaluate(el => { | |
| return el.value || el.textContent || el.getAttribute('data-email') || el.getAttribute('data-clipboard-text'); | |
| }, element); | |
| if (value && value.includes('@') && !value.includes('gmail')) { | |
| email = value.trim(); | |
| console.log(`Found email with selector "${selector}": ${email}`); | |
| break; | |
| } | |
| } | |
| if (email) break; | |
| } catch (e) {} | |
| } | |
| } | |
| console.log('\nTaking screenshot...'); | |
| await page.screenshot({ path: 'tmailor-screenshot.png', fullPage: true }); | |
| console.log('Screenshot saved to tmailor-screenshot.png'); | |
| console.log('\n=== RESULT ==='); | |
| if (email && email.includes('@')) { | |
| console.log('SUCCESS! Temp Email:', email); | |
| } else { | |
| console.log('Could not find a temp email address'); | |
| console.log('\n--- Page visible text (first 1500 chars) ---'); | |
| console.log(allText.substring(0, 1500)); | |
| } | |
| return email; | |
| } catch (error) { | |
| console.error('Error:', error.message); | |
| } finally { | |
| await browser.close(); | |
| console.log('Browser closed.'); | |
| } | |
| } | |
| getTempMail(); | |