kink-discovery / scripts /login_repro.py
Perplexed7675's picture
Sync from kink_cli (Docker Space)
a814fd9 verified
Raw
History Blame Contribute Delete
2.79 kB
"""Repro the user's complaints about logging back in:
1. "Attempting to log back in does not work with creds from an existing profile."
→ in practice it just takes a while with no UI indication.
2. After login, the empty-deck banner ("You've gone through what we have for now.")
can flash up before the recs query has populated.
Drives the live site through a real Playwright login flow and dumps a timeline.
"""
from __future__ import annotations
import os
import sys
import time
BASE = os.environ.get("KINK_AUDIT_BASE_URL", "https://perplexed7675-kink-discovery.hf.space")
USER_ID = os.environ.get("REPRO_USER_ID", "real-bunny-72")
TOKEN = os.environ.get("REPRO_TOKEN", "pet-amoeba")
def main() -> int:
from playwright.sync_api import sync_playwright
print(f"== login repro ==", flush=True)
print(f"base_url: {BASE}")
print(f"user_id: {USER_ID}", flush=True)
with sync_playwright() as p:
browser = p.chromium.launch()
ctx = browser.new_context(viewport={"width": 900, "height": 1400})
page = ctx.new_page()
timeline: list[tuple[float, str]] = []
t0 = time.monotonic()
def log(label: str) -> None:
timeline.append((time.monotonic() - t0, label))
print(f" [{timeline[-1][0]:>5.1f}s] {label}", flush=True)
page.goto(BASE, wait_until="domcontentloaded")
log("page loaded")
page.wait_for_selector('[data-testid="onboarding-have-profile"]', timeout=20_000)
page.click('[data-testid="onboarding-have-profile"]')
log("clicked 'I have a profile'")
page.fill('[data-testid="onboarding-login-user-id"]', USER_ID)
page.fill('[data-testid="onboarding-login-private-token"]', TOKEN)
log("filled credentials")
page.click('[data-testid="onboarding-open-profile"]')
log("clicked 'Open profile'")
# Snapshot every 250ms; capture FULL visible body text + take screenshot
import os
out_dir = "/tmp/login_repro_ticks"
os.makedirs(out_dir, exist_ok=True)
for tick in range(20):
page.wait_for_timeout(250)
body_text = page.evaluate(
r"""() => (document.body.innerText || '').trim().split(/\n/).filter(s => s.trim()).slice(0, 8).join(' | ')"""
)
log(f"tick{tick}: body={body_text!r}")
page.screenshot(path=f"{out_dir}/tick{tick:02d}.png", full_page=False)
if page.evaluate("() => Boolean(document.querySelector('.card-title'))"):
break
page.screenshot(path="/tmp/login_repro_final.png", full_page=True)
log("screenshot at /tmp/login_repro_final.png")
browser.close()
return 0
if __name__ == "__main__":
raise SystemExit(main())