You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Playwright协程爬虫无提速及无头模式异常问题求助

问题解决思路

问题1:Headless=false时浏览器停留在about:blank

  • 核心原因:非无头模式下,协程调度与浏览器UI线程的执行逻辑冲突,或初始化阶段存在未正确处理的阻塞操作。
  • 解决步骤:
    • 将浏览器实例的创建移至Dispatchers.IO协程上下文执行,避免在runBlocking根线程同步初始化阻塞UI渲染。
    • 显式添加浏览器启动参数,解决环境依赖或渲染阻塞问题,比如Linux环境添加--no-sandbox,Windows可指定窗口大小。
    • 检查getBookLinks方法是否存在未关闭的页面/浏览器上下文,残留资源会导致后续页面创建失败。
  • 代码示例:
val playwright = Playwright.create()
val browser = runBlocking(Dispatchers.IO) {
    playwright.chromium().launch(
        BrowserType.LaunchOptions()
            .setHeadless(false)
            .setArgs(listOf("--no-sandbox", "--window-size=1920,1080"))
    )
}
  • 额外提示:Windows环境下,部分杀毒软件或防火墙会拦截非无头浏览器启动,可临时关闭相关软件测试。

问题2:Headless=true时协程未提速

  • 核心原因:
    • 默认情况下多个协程共享同一个浏览器上下文/页面,而Playwright页面是单线程模型,实际请求仍串行执行。
    • 未控制并发数,或使用错误的协程调度器,导致协程无法真正并行。
  • 解决步骤:
    1. 为每个爬取任务创建独立的浏览器上下文:上下文是Playwright的隔离单元,多上下文可并行处理请求。
    2. 使用Semaphore限制并发数:避免触发目标网站反爬规则,同时确保协程真正并行。
    3. 用async + awaitAll替代launch:方便统一收集结果,且能确保异步任务的并行执行。
  • 代码示例:
runBlocking(Dispatchers.IO) {
    val semaphore = Semaphore(10) // 并发数根据网站反爬强度调整,建议5-20
    val bookLinks = getBookLinks()
    val results = bookLinks.map { link ->
        async {
            semaphore.withPermit {
                val context = browser.newContext()
                val page = context.newPage()
                val bookData = try {
                    page.navigate(link)
                    // 替换为你的详情爬取逻辑
                    mapOf(
                        "title" to page.locator(".book-title").textContent(),
                        "author" to page.locator(".book-author").textContent()
                    )
                } finally {
                    page.close()
                    context.close()
                }
                bookData
            }
        }
    }.awaitAll()
    // 处理爬取结果
    results.forEach { println(it) }
}
  • 额外优化:启用请求拦截过滤无用资源,减少页面加载时间:
context.route("**/*.{png,jpg,jpeg,css,js,svg}", Route::abort)

内容的提问来源于stack exchange,提问作者JAEIK JEONG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 06:02:37