| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- """After login click, observe the page: screenshot + dump new DOM elements.
- We know now that:
- - click does trigger a state change (the form submit fires, or geetest starts loading)
- - but .geetest_canvas_bg selector times out (wrong class)
- - the original geetest v4 widget uses .geetest_canvas_bg, .geetest_canvas_slice, etc.
- - 996box may have renamed or wrapped them in a custom container
- So dump every iframe and every new element with class containing 'geetest' or 'captcha'.
- """
- import asyncio
- import sys
- from pathlib import Path
- _HERE = Path(__file__).resolve().parent
- sys.path.insert(0, str(_HERE.parent / "src"))
- from playwright.async_api import async_playwright
- EDGE = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
- URL = "https://pc.hzwlan.com/login/account"
- async def main():
- out = _HERE / "jfbym_diag"
- async with async_playwright() as p:
- browser = await p.chromium.launch(executable_path=EDGE, headless=True)
- ctx = await browser.new_context(viewport={"width": 1366, "height": 768})
- page = await ctx.new_page()
- await page.goto(URL, wait_until="networkidle", timeout=30000)
- await page.fill("input#username", "longwu988")
- await page.locator("input#username").press("Tab")
- await page.fill("input#password", "Longwu1988")
- await page.locator("input#password").press("Tab")
- await page.wait_for_timeout(300)
- await page.locator("button.login-form_box__submit_button").first.click(force=True)
- # Wait longer for the widget to appear (geetest loads its own assets)
- await page.wait_for_timeout(8000)
- await page.screenshot(path=str(out / "a1_after_click_v2.png"), full_page=True)
- info = await page.evaluate("""() => ({
- url: location.href,
- title: document.title,
- any_geetest: !!document.querySelector('[class*=geetest]'),
- any_captcha: !!document.querySelector('[class*=captcha]'),
- geetest_els: [...document.querySelectorAll('[class*=geetest]')]
- .slice(0, 15)
- .map(e => ({tag: e.tagName, cls: e.className.slice(0, 80)})),
- captcha_els: [...document.querySelectorAll('[class*=captcha]')]
- .slice(0, 15)
- .map(e => ({tag: e.tagName, cls: e.className.slice(0, 80)})),
- iframes: [...document.querySelectorAll('iframe')].map(i => i.src.slice(0, 100)),
- canvas_count: document.querySelectorAll('canvas').length,
- canvas_classes: [...document.querySelectorAll('canvas')]
- .map(c => c.className.slice(0, 80)),
- })""")
- print(f"url: {info['url']}")
- print(f"any_geetest: {info['any_geetest']}, any_captcha: {info['any_captcha']}")
- print(f"geetest_els: {info['geetest_els']}")
- print(f"captcha_els: {info['captcha_els']}")
- print(f"canvases: {info['canvas_count']} {info['canvas_classes']}")
- print(f"iframes: {info['iframes']}")
- await browser.close()
- print(f"\nscreenshot: {out / 'a1_after_click_v2.png'}")
- asyncio.run(main())
|