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

如何使用Puppeteer滚动Google Jobs页面左侧职位列表?

解决Puppeteer滚动Google Jobs左侧职位列表的问题

Google Jobs的左侧职位列表是独立的滚动容器,并非整个页面滚动,所以直接调用全局滚动方法(比如window.scrollTo)不会生效。以下是可行的解决思路和代码实现:

核心思路

找到左侧列表的专属滚动容器元素,直接操作该元素的滚动属性,同时配合等待新内容加载的逻辑,确保能加载出所有职位。

具体实现步骤

1. 定位滚动容器

先通过浏览器开发者工具确认左侧列表的滚动容器选择器,通常可用以下选择器之一(根据页面实际结构调整):

  • div.gws-plugins-horizon-jobs__jl
  • div[role='listbox']
  • #tl_ditc > div

2. 滚动容器并等待内容加载

通过page.evaluate()在页面上下文内操作容器的scrollTop属性,每次滚动后等待新职位加载,重复直到无法加载更多内容。

示例代码:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({ headless: false });
  const page = await browser.newPage();
  await page.goto('你的Google Jobs目标链接', { waitUntil: 'networkidle2' });

  // 定义滚动加载函数
  const scrollJobList = async () => {
    let previousHeight = 0;
    let currentHeight = 0;
    do {
      previousHeight = currentHeight;
      // 滚动容器到底部
      currentHeight = await page.evaluate(() => {
        const jobListContainer = document.querySelector('div.gws-plugins-horizon-jobs__jl');
        if (!jobListContainer) return 0;
        jobListContainer.scrollTop = jobListContainer.scrollHeight;
        return jobListContainer.scrollHeight;
      });
      // 等待新内容加载(可根据网络情况调整等待时间)
      await page.waitForTimeout(2000);
      // 检查是否有"查看更多"按钮,存在则点击
      const hasMoreButton = await page.$eval('button[aria-label="查看更多职位"]', el => !!el).catch(() => false);
      if (hasMoreButton) {
        await page.click('button[aria-label="查看更多职位"]');
        await page.waitForTimeout(2000);
      }
    } while (currentHeight > previousHeight); // 滚动高度不再变化时停止
  };

  await scrollJobList();

  // 抓取职位信息示例
  const jobs = await page.evaluate(() => {
    const jobItems = document.querySelectorAll('div.gws-plugins-horizon-jobs__job-listing');
    return Array.from(jobItems).map(item => {
      const title = item.querySelector('h3').textContent.trim();
      const company = item.querySelector('div.gws-plugins-horizon-jobs__company-name').textContent.trim();
      return { title, company };
    });
  });

  console.log(jobs);
  await browser.close();
})();

3. 备选方案:模拟鼠标滚轮滚动

如果直接操作scrollTop无效,可以模拟在容器内滚动鼠标滚轮:

await page.evaluate(() => {
  const jobListContainer = document.querySelector('div.gws-plugins-horizon-jobs__jl');
  if (jobListContainer) {
    // 模拟滚轮向下滚动300px
    jobListContainer.dispatchEvent(new WheelEvent('wheel', { deltaY: 300, bubbles: true }));
  }
});

将这段代码放到循环中,配合等待逻辑重复执行即可。

注意事项

  • Google页面结构可能会更新,需定期检查选择器是否有效;
  • 滚动间隔和等待时间要根据网络情况调整,避免触发反爬机制;
  • 可添加随机延迟,模拟人类操作行为。

内容的提问来源于stack exchange,提问作者Sumanth Jois

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 23:30:24