Spaces:
Paused
Paused
| #!/usr/bin/env python3 | |
| """ | |
| 捕获导航事件,获取最终的EPUB URL | |
| """ | |
| from playwright.sync_api import sync_playwright | |
| import time | |
| MD5 = "d94c20d1364af9b484949659398c4062" | |
| SLOW_URL = f"https://annas-archive.gl/slow_download/{MD5}/0/3" | |
| def capture_navigation(): | |
| """捕获所有导航事件""" | |
| print(f"目标: {SLOW_URL}\n") | |
| result = {"url": None, "error": None} | |
| with sync_playwright() as p: | |
| browser = p.chromium.launch(headless=False) | |
| context = browser.new_context( | |
| user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36", | |
| viewport={"width": 1920, "height": 1080}, | |
| ) | |
| page = context.new_page() | |
| # 监听所有可能的导航事件 | |
| def on_navigation(frame): | |
| url = frame.url if frame else page.url | |
| print(f" [导航事件] {url}") | |
| page.on("navigation", on_navigation) | |
| page.on("framenavigated", on_navigation) | |
| # 监听下载 | |
| def on_download(download): | |
| print(f" [下载事件] {download.url}") | |
| result["url"] = download.url | |
| page.on("download", on_download) | |
| print("访问slow_download...") | |
| try: | |
| page.goto(SLOW_URL, timeout=120000, wait_until="domcontentloaded") | |
| except Exception as e: | |
| print(f"goto异常: {e}") | |
| # 可能是导航成功了 | |
| result["url"] = page.url | |
| print(f"初始URL: {page.url}") | |
| # 等待60秒 | |
| print("\n等待60秒...") | |
| for i in range(60): | |
| time.sleep(1) | |
| try: | |
| current_url = page.url | |
| if current_url.lower().endswith('.epub'): | |
| print(f"\n在第{i+1}秒发现EPUB URL: {current_url}") | |
| result["url"] = current_url | |
| break | |
| if (i + 1) % 10 == 0: | |
| print(f" {i+1}秒... 当前URL: {current_url[:60]}...") | |
| except Exception as e: | |
| # 页面可能在导航中 | |
| print(f" {i+1}秒... (页面可能正在导航: {str(e)[:30]})") | |
| continue | |
| print(f"\n最终URL: {page.url}") | |
| browser.close() | |
| return result["url"] | |
| if __name__ == "__main__": | |
| print("=" * 60) | |
| print("捕获导航事件") | |
| print("=" * 60) | |
| print() | |
| url = capture_navigation() | |
| print(f"\n{'='*60}") | |
| if url: | |
| print(f"成功获取到: {url}") | |
| else: | |
| print("未能获取到EPUB链接") | |
| print("=" * 60) |