Compare commits
5
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cd712e992d | ||
|
|
872acb8449 | ||
|
|
f161dbbbd5 | ||
|
|
b29b438df3 | ||
|
|
4798f706b8 |
@@ -302,8 +302,10 @@ def save_result(acc: dict, category: str, msg: str = "") -> None:
|
||||
|
||||
|
||||
def _cookie_login(driver, cookie: str) -> bool:
|
||||
driver.get("https://www.roblox.com")
|
||||
driver.get("https://www.roblox.com/home")
|
||||
time.sleep(2)
|
||||
if "/login" not in driver.current_url:
|
||||
return True
|
||||
try:
|
||||
accept = WebDriverWait(driver, 3).until(EC.element_to_be_clickable((By.XPATH, "//button[text()='Accept All']")))
|
||||
accept.click()
|
||||
@@ -311,11 +313,18 @@ def _cookie_login(driver, cookie: str) -> bool:
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
driver.add_cookie({"name": ".ROBLOSECURITY", "value": cookie, "domain": ".roblox.com"})
|
||||
driver.add_cookie({
|
||||
"name": ".ROBLOSECURITY",
|
||||
"value": cookie,
|
||||
"domain": ".roblox.com",
|
||||
"path": "/",
|
||||
"secure": True,
|
||||
})
|
||||
driver.get("https://www.roblox.com/home")
|
||||
time.sleep(3)
|
||||
time.sleep(4)
|
||||
return "/login" not in driver.current_url
|
||||
except Exception:
|
||||
except Exception as e:
|
||||
log.warning("Cookie login error: %s", e)
|
||||
return False
|
||||
|
||||
|
||||
@@ -346,6 +355,17 @@ def process_account(driver, acc: dict, donor_video: Path | None,
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# close any modal dialogs blocking the login form
|
||||
for _ in range(10):
|
||||
try:
|
||||
modal = driver.find_element(By.XPATH, "//h4[@class='modal-title']/ancestor::div[contains(@class, 'modal')]")
|
||||
close_btn = modal.find_element(By.XPATH, ".//button[contains(@class, 'close')]")
|
||||
close_btn.click()
|
||||
log.info("Dismissed login modal")
|
||||
time.sleep(1)
|
||||
except Exception:
|
||||
break
|
||||
|
||||
username_input = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "login-username")))
|
||||
ActionChains(driver).move_to_element(username_input).pause(0.3).perform()
|
||||
time.sleep(0.1); username_input.click(); time.sleep(0.1); username_input.clear()
|
||||
@@ -390,7 +410,9 @@ def process_account(driver, acc: dict, donor_video: Path | None,
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
camera_btn = WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.XPATH, "//span[text()='Continue with camera']/ancestor::button")))
|
||||
camera_btn = WebDriverWait(driver, 15).until(
|
||||
EC.element_to_be_clickable((By.XPATH, "//button[contains(@class, 'age-verification-button')]"))
|
||||
)
|
||||
try:
|
||||
camera_btn.click()
|
||||
except Exception:
|
||||
@@ -430,8 +452,8 @@ def process_account(driver, acc: dict, donor_video: Path | None,
|
||||
)
|
||||
log.info("Persona iframe found")
|
||||
except Exception:
|
||||
log.warning("Persona widget iframe not found")
|
||||
return False
|
||||
log.warning("Persona widget iframe not found, will retry")
|
||||
return True
|
||||
|
||||
if frames_b64 is None and donor_video:
|
||||
w, h = _get_video_size(donor_video)
|
||||
@@ -585,6 +607,13 @@ def process_account(driver, acc: dict, donor_video: Path | None,
|
||||
log.info("Clicked selfie Continue")
|
||||
time.sleep(3)
|
||||
break
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
driver.find_element(By.XPATH, "//button[contains(@data-test, 'selfie') or contains(@aria-label, 'camera')]").click()
|
||||
log.info("Clicked selfie Continue (fallback)")
|
||||
time.sleep(3)
|
||||
break
|
||||
except Exception:
|
||||
time.sleep(1)
|
||||
|
||||
@@ -593,12 +622,20 @@ def process_account(driver, acc: dict, donor_video: Path | None,
|
||||
try:
|
||||
alert = driver.find_element(By.XPATH, "//span[@role='alert']")
|
||||
txt = alert.text.lower()
|
||||
if "center" in txt or "центр" in txt:
|
||||
if "center" in txt or "центр" in txt or "look" in txt:
|
||||
driver.execute_script("window.__startVideo();")
|
||||
log.info("Center instruction detected, video started")
|
||||
break
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
body = driver.find_element(By.TAG_NAME, "body")
|
||||
if "center" in body.text.lower() or "центр" in body.text.lower() or "look straight" in body.text.lower():
|
||||
driver.execute_script("window.__startVideo();")
|
||||
log.info("Center instruction detected (body fallback), video started")
|
||||
break
|
||||
except Exception:
|
||||
pass
|
||||
time.sleep(1)
|
||||
|
||||
end_time = time.time() + 120
|
||||
@@ -660,9 +697,9 @@ def process_account(driver, acc: dict, donor_video: Path | None,
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
log.info("No decline message — pending (wait for days)")
|
||||
log.info("Verification timed out — restarting")
|
||||
save_result(acc, "pending", "no result in 120s loop")
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def ensure_files() -> None:
|
||||
@@ -729,7 +766,7 @@ def _process_one(tid: int, acc: dict,
|
||||
driver = None
|
||||
try:
|
||||
with _chrome_lock:
|
||||
driver = uc.Chrome(options=options, headless=False, version_main=149)
|
||||
driver = uc.Chrome(options=options, headless=False)
|
||||
result = process_account(driver, acc, donor_video, frames_b64, fw, fh, dir_ranges, speed_multiplier)
|
||||
if result == "verified":
|
||||
log.info("[T%d] Account verified", tid)
|
||||
@@ -750,6 +787,10 @@ def _process_one(tid: int, acc: dict,
|
||||
driver.quit()
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
driver.__class__.__del__ = lambda s: None
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if pproxy_proc:
|
||||
pproxy_proc.terminate()
|
||||
|
||||
Reference in New Issue
Block a user