mirror of
https://github.com/halfwaystudent/douyin-sparkflow.git
synced 2026-09-05 15:38:58 +08:00
fix: handle existing login in lazy desktop
This commit is contained in:
@@ -275,16 +275,42 @@ class LoginDesktopManager:
|
|||||||
page = await self._get_active_page()
|
page = await self._get_active_page()
|
||||||
await page.goto(refresh_url, wait_until="domcontentloaded", timeout=60000)
|
await page.goto(refresh_url, wait_until="domcontentloaded", timeout=60000)
|
||||||
|
|
||||||
await page.locator('img[class*="qrcode"]').first.wait_for(state="visible", timeout=30000)
|
deadline = asyncio.get_running_loop().time() + 45
|
||||||
|
logged_in = False
|
||||||
|
qr_ready = False
|
||||||
|
while asyncio.get_running_loop().time() < deadline:
|
||||||
|
qr = page.locator('img[class*="qrcode"]').first
|
||||||
|
try:
|
||||||
|
if await qr.count() and await qr.is_visible():
|
||||||
|
qr_ready = True
|
||||||
|
break
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
if "/creator-micro/" in page.url:
|
||||||
|
logged_in = True
|
||||||
|
break
|
||||||
|
try:
|
||||||
|
await collect_login_result(page, self.context, timeout_ms=800)
|
||||||
|
logged_in = True
|
||||||
|
break
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
await asyncio.sleep(0.75)
|
||||||
|
|
||||||
|
if not qr_ready and not logged_in:
|
||||||
|
raise RuntimeError("Douyin login page did not expose a QR code or a logged-in session")
|
||||||
|
|
||||||
await self.reduce_page_activity(page)
|
await self.reduce_page_activity(page)
|
||||||
try:
|
if qr_ready:
|
||||||
await page.wait_for_function(
|
try:
|
||||||
"() => !/\u4e8c\u7ef4\u7801\u5931\u6548|\u4e8c\u7ef4\u7801\u8fc7\u671f/.test(document.body?.innerText || '')",
|
await page.wait_for_function(
|
||||||
timeout=30000,
|
"() => !/\u4e8c\u7ef4\u7801\u5931\u6548|\u4e8c\u7ef4\u7801\u8fc7\u671f/.test(document.body?.innerText || '')",
|
||||||
)
|
timeout=30000,
|
||||||
except Exception:
|
)
|
||||||
pass
|
except Exception:
|
||||||
return {"ok": True, "url": page.url}
|
pass
|
||||||
|
return {"ok": True, "url": page.url, "logged_in": logged_in, "qr_ready": qr_ready}
|
||||||
|
|
||||||
async def export(self):
|
async def export(self):
|
||||||
self.mark_activity()
|
self.mark_activity()
|
||||||
|
|||||||
@@ -122,6 +122,8 @@ class DeploymentContractTests(unittest.TestCase):
|
|||||||
self.assertIn("start_idle_monitor", server)
|
self.assertIn("start_idle_monitor", server)
|
||||||
self.assertIn("schedule_stop_after_export", server)
|
self.assertIn("schedule_stop_after_export", server)
|
||||||
self.assertIn('reduced_motion="reduce"', server)
|
self.assertIn('reduced_motion="reduce"', server)
|
||||||
|
self.assertIn('"/creator-micro/" in page.url', server)
|
||||||
|
self.assertIn('"qr_ready": qr_ready', server)
|
||||||
|
|
||||||
def test_login_desktop_exposes_cropped_qr_endpoint(self):
|
def test_login_desktop_exposes_cropped_qr_endpoint(self):
|
||||||
server = (SOURCE_ROOT / "login_desktop_server.py").read_text(encoding="utf-8")
|
server = (SOURCE_ROOT / "login_desktop_server.py").read_text(encoding="utf-8")
|
||||||
|
|||||||
Reference in New Issue
Block a user