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

如何自动化获取Core Web Vitals的URL分级数据?Puppeteer爬GSC遇阻

问题排查与解决方案

你的问题核心是使用了过于脆弱的绝对层级选择器,而非GSC的安全限制。下面是具体的分析和修复方案:

1. 选择器的问题

你写的选择器基于DOM节点的绝对层级(比如body > div:nth-child(9) > c-wiz:nth-child(6)...),这种选择器完全依赖页面固定结构,但Google Search Console的UI会频繁更新,哪怕微小的布局调整都会导致选择器失效。

从你提供的目标元素来看,显示数量的元素有明确的class:qL2dyd dzkZrb,直接用这个class选择器就能精准定位,无需依赖层级。

2. 修复后的代码

替换掉原来的绝对选择器,改用class选择器,同时优化等待逻辑:

const fetchUrlMetrics = async (page) => {
  try {
    // 直接使用目标元素的class选择器
    const poorUrlsSelector = ".qL2dyd.dzkZrb";
    console.log("Waiting for poor URLs element...");
    
    // 等待元素可见,增加超时时间避免加载延迟导致的报错
    await page.waitForSelector(poorUrlsSelector, { visible: true, timeout: 10000 });
    console.log("Poor URLs element is visible.");

    const poorUrlsText = await page.evaluate((selector) => {
      // 页面可能存在多个相同class的元素,筛选出包含"poor URLs"的目标元素
      const elements = document.querySelectorAll(selector);
      for (const el of elements) {
        if (el.innerText.includes("poor URLs")) {
          return el.innerText;
        }
      }
      return null;
    }, poorUrlsSelector);

    console.log("Fetched poor URLs text:", poorUrlsText);

    if (poorUrlsText) {
      const poorCount = parseInt(poorUrlsText.replace(/\D/g, ''), 10); 
      console.log(`Poor URLs: ${poorCount}`);
    } else {
      console.log("No poor URLs found.");
    }

  } catch (error) {
    console.error("Error fetching URL metrics:", error);
  }
};

3. 额外优化建议

  • 批量获取三个分级的数据:优质(Good)、需改进(Needs Improvement)、劣质(Poor)的元素结构一致,可循环处理避免重复代码:
    const grades = ["Good", "Needs Improvement", "Poor"];
    for (const grade of grades) {
      const text = await page.evaluate((selector, gradeStr) => {
        const elements = document.querySelectorAll(selector);
        for (const el of elements) {
          if (el.innerText.includes(`${gradeStr.toLowerCase()} URLs`)) {
            return el.innerText;
          }
        }
        return null;
      }, ".qL2dyd.dzkZrb", grade);
      // 解析并处理数值...
    }
    
  • 等待页面完全加载:进入Core Web Vitals页面后,可增加await page.waitForNetworkIdle({ idleTime: 2000 }),确保图表和数据完全渲染完成。
  • 降低反爬风险:设置真实的User-Agent、避免频繁请求页面,调试时可禁用无头模式(headless: false)观察页面加载状态。

4. 关于API的补充

虽然GSC API和Crux API没有直接返回分级URL数量的端点,但你可以通过Crux API获取单URL的CWV数据后自行统计分级数量——不过对于大量URL来说,爬取GSC页面的方式效率更高。

内容的提问来源于stack exchange,提问作者Manu Bhargav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 22:47:01