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

Playwright本地运行正常,部署至Google Run后超时故障求助

解决Playwright爬虫在Google Cloud Run超时的思路

定位卡住的具体环节

在脚本关键步骤(登录、页面导航、下载触发)前后添加时间戳日志,精准定位耗时节点:

  • 比如登录完成后记录耗时,导航到目标页面后记录耗时,触发下载后标记等待开始时间,直到下载完成或超时。
  • 日志直接输出到标准输出,确保Cloud Run能捕获到,以此明确是卡在页面加载、下载等待还是其他环节。

适配Playwright无头模式配置

Cloud Run环境必须使用无头浏览器,检查启动参数是否适配:

  • 确保Chrome启动时添加--no-sandbox和--disable-setuid-sandbox(Cloud Run无权限启用沙箱)。
  • 设置明确的viewport参数(比如viewport={"width": 1920, "height": 1080}),避免页面布局异常导致元素定位失败或加载缓慢。
  • 禁用不必要的Chrome特性,比如--disable-dev-shm-usage(解决Cloud Run临时空间不足问题)、--disable-gpu(无GPU环境无需加载)。

修正CSV下载逻辑

本地浏览器的下载行为在Cloud Run环境中存在差异,需调整逻辑:

  • 不要依赖浏览器默认下载路径,显式设置下载目录并通过page.wait_for_download()等待下载完成,示例:
    with page.expect_download() as download_info:
        page.click("text=下载CSV")
    download = download_info.value
    download.save_as("/tmp/downloaded.csv")
    
  • 若目标网站的CSV下载是AJAX请求,可直接拦截请求获取文件内容,跳过页面渲染等待环节。

切换Cloud Run运行模式

如果脚本是长时间运行的批量任务,不要使用Cloud Run服务模式(HTTP触发,请求超时限制严格),改用Cloud Run Jobs模式:

  • Jobs模式专门处理异步长时间任务,超时设置更灵活,不会因HTTP请求返回而中断未完成的任务。
  • 排查是否误用了服务模式,导致脚本仍在运行但Cloud Run判定请求已完成(日志显示200但实际任务未结束)。

验证网络与反爬限制

  • 检查Cloud Run网络连通性:在Docker镜像中添加curl命令测试目标网站的响应时间,确认无防火墙或VPC限制(若目标网站在私有网络,需配置VPC连接器)。
  • 目标网站可能识别Cloud Run的IP或无头浏览器:
    • 设置真实的Chrome稳定版User-Agent。
    • 添加模拟人类操作的随机延迟(比如点击前page.wait_for_timeout(1000-3000))、滚动页面等动作。
    • 排查是否存在隐性人机验证(如滑块、验证码),本地测试可能未触发但Cloud Run环境会触发。

检查Docker镜像依赖

确保Dockerfile正确安装Playwright的所有依赖:

  • 除了安装playwright Python包,必须运行:
    playwright install chromium
    playwright install-deps chromium
    
  • 基于python:3.11-slim等轻量镜像构建时,需安装系统级依赖(如libnss3、libatk1.0-0等),避免Chrome启动失败或运行异常。

监控资源使用情况

即使分配了8GB内存和8CPU,也要查看Cloud Run的监控指标:

  • 检查CPU使用率是否持续100%(可能存在死循环或阻塞操作)。
  • 检查内存是否不足(比如下载大文件时内存溢出)。
  • 查看网络出站延迟,确认是否因目标网站响应缓慢导致超时。

内容的提问来源于stack exchange,提问作者Wesley Jeftha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 18:32:34