Update Up

This commit is contained in:
cluntop
2026-02-27 02:13:13 +08:00
parent 898fc5b5f4
commit 6737d7569f
+15 -2
View File
@@ -32,6 +32,9 @@ async def main():
browser = await p.chromium.launch(headless=True)
page = await browser.new_page(ignore_https_errors=True)
# 【核心新增】:注入反爬虫绕过脚本,抹除自动化特征,欺骗防御蜘蛛的探测
await page.add_init_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
page_num = 1
while True:
print(f"正在加载并抓取第 {page_num} 页数据...")
@@ -40,13 +43,23 @@ async def main():
# 移除不可靠的 networkidle,使用默认导航机制
await page.goto(url)
# 【核心新增】:强制屏蔽拦截遮罩,破坏防御弹窗,恢复“可操作、可活动、可点击”状态
await page.add_style_tag(content='''
.app-modal__overlay, .modal-auth__inner { display: none !important; z-index: -9999 !important; }
body, html { pointer-events: auto !important; overflow: auto !important; user-select: auto !important; }
''')
# 使用 JS 直接从 DOM 树中强制物理删除这两个拦截节点
await page.evaluate('''() => {
document.querySelectorAll('.app-modal__overlay, .modal-auth__inner').forEach(el => el.remove());
}''')
# 定位目标:跳过 skeleton 骨架屏,直接锁定在线主播节点
try:
# 【核心修正】:显式等待真实数据的 CSS 节点渲染到 DOM 中(最长容忍 10 秒)
# 显式等待真实数据的 CSS 节点渲染到 DOM 中(最长容忍 20 秒)
# 统一 <div class="content-gallery content-gallery--live-listing"> 数组 和 <div class="content-gallery__item">
await page.wait_for_selector(".content-gallery--live-listing .content-gallery__item", timeout=20000)
except Exception:
# 如果 10 秒后目标节点仍未出现,说明确实到达了没有数据的最后一页
# 如果 20 秒后目标节点仍未出现,说明确实到达了没有数据的最后一页
print(f"{page_num} 页未检测到有效在线主播数据,翻页结束。\n")
break