Spaces:
Paused
Paused
File size: 5,850 Bytes
cf8e6e2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 | from fastapi import FastAPI
import undetected_chromedriver as uc
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import requests
import time
import random
import string
import re
import base64
import os
app = FastAPI()
# --- UTILS ---
def gen_password():
chars = string.ascii_letters + string.digits + "!@#$%^&*"
return ''.join(random.choice(chars) for i in range(12)) + "Aa1!"
def get_screenshot_b64(driver):
try:
return driver.get_screenshot_as_base64()
except:
return None
# --- MAIL.TM ---
class MailTM:
def __init__(self):
self.base = "https://api.mail.tm"
self.headers = {"Content-Type": "application/json", "Accept": "application/json"}
self.email = None
self.password = None
self.token = None
def create(self):
try:
# Domain
dom_res = requests.get(f"{self.base}/domains", headers=self.headers)
if dom_res.status_code != 200: return "Failed to fetch domains"
domain = dom_res.json()['hydra:member'][0]['domain']
# Register
self.password = gen_password()
user = ''.join(random.choices(string.ascii_lowercase + string.digits, k=10))
self.email = f"{user}@{domain}"
reg = requests.post(f"{self.base}/accounts", json={"address": self.email, "password": self.password})
if reg.status_code != 201: return f"Reg Failed: {reg.text}"
# Token
tok = requests.post(f"{self.base}/token", json={"address": self.email, "password": self.password})
self.token = tok.json().get('token')
return None # Success
except Exception as e:
return str(e)
def get_link(self):
head = {**self.headers, "Authorization": f"Bearer {self.token}"}
for _ in range(15): # 45 seconds polling
time.sleep(3)
try:
msgs = requests.get(f"{self.base}/messages", headers=head).json().get('hydra:member', [])
for m in msgs:
if "Verify" in m['subject'] or "ElevenLabs" in m['from']['name']:
full = requests.get(f"{self.base}/messages/{m['id']}", headers=head).json()
body = full.get('text') or full.get('html') or ""
match = re.search(r'https://elevenlabs\.io/app/action\?mode=verifyEmail[^"\s<>]+', body)
if match: return match.group(0)
except: pass
return None
# --- MAIN ---
@app.get("/")
def home(): return {"status": "Debugger Online"}
@app.get("/gen")
def generate():
logs = []
driver = None
mail = MailTM()
try:
logs.append("1. Creating Email...")
err = mail.create()
if err: raise Exception(err)
logs.append(f"Email: {mail.email}")
logs.append("2. Launching Chrome...")
options = uc.ChromeOptions()
options.add_argument('--headless=new')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--window-size=1280,720')
driver = uc.Chrome(options=options)
logs.append("3. Navigating to Signup...")
driver.get("https://elevenlabs.io/sign-up")
time.sleep(5)
logs.append("4. Filling Form...")
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, "email")))
driver.find_element(By.NAME, "email").send_keys(mail.email)
driver.find_element(By.NAME, "password").send_keys(mail.password)
logs.append("5. Attempting Turnstile Click...")
try:
time.sleep(2)
frames = driver.find_elements(By.TAG_NAME, "iframe")
clicked = False
for frame in frames:
if "challenges" in frame.get_attribute("src"):
driver.switch_to.frame(frame)
time.sleep(1)
driver.find_element(By.XPATH, "//body").click()
driver.switch_to.default_content()
logs.append("-> Turnstile Clicked")
clicked = True
time.sleep(3)
break
if not clicked: logs.append("-> No Turnstile found (Auto-pass?)")
except Exception as e:
logs.append(f"-> Turnstile Error: {str(e)}")
logs.append("6. Clicking Submit...")
btn = driver.find_element(By.CSS_SELECTOR, 'button[type="submit"]')
driver.execute_script("arguments[0].click();", btn)
logs.append("7. Waiting for Email...")
link = mail.get_link()
if not link: raise Exception("Email timeout (Check Screenshot)")
logs.append("8. Verifying Link...")
driver.get(link)
time.sleep(5)
logs.append("9. Fetching API Key...")
login = requests.post("https://api.elevenlabs.io/v1/user/login", json={
"email": mail.email, "password": mail.password
})
if login.status_code == 200:
return {
"success": True,
"email": mail.email,
"password": mail.password,
"api_key": login.json().get("xi_api_key"),
"logs": logs
}
else:
raise Exception(f"Login Failed: {login.status_code}")
except Exception as e:
# CAPTURE SCREENSHOT ON FAILURE
shot = get_screenshot_b64(driver) if driver else None
return {
"success": False,
"error": str(e),
"logs": logs,
"screenshot": shot
}
finally:
if driver: driver.quit() |