gen / app.py
darkvibe314's picture
Create app.py
cf8e6e2 verified
Raw
History Blame Contribute Delete
5.85 kB
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()