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

如何使用Selenium Python稳定滚动谷歌职位页面至底部

如何稳定滚动Google职位搜索页面到底部?

我之前也踩过这个坑——用html.send_keys(Keys.END)确实不稳定,毕竟Google Jobs是动态加载内容的:只有当你滚动到列表接近底部时,它才会加载新的职位卡片,直接跳到底部经常会让页面来不及触发加载逻辑,导致停在半路上。

分享几个亲测有效的稳定方案,按推荐程度排序:

方案1:循环滚动+检查页面高度(最可靠)

这个方法的核心是:每次滚动到底部后,等待新内容加载,然后对比页面高度——如果高度不再变化,说明已经加载完所有内容了。

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.google.com/search?q=upsc+jobs+in+india&rlz=1C1CHBF_enIN869IN869&oq=upsc+jo&aqs=chrome.1.69i57j0i433i512j0i131i433i512j0i512l3j0i131i433i512l2j0i512j0i433i512&sourceid=chrome&ie=UTF-8&ibp=htl;jobs&sa=X&sqi=2&ved=2ahUKEwjR27GN_qPzAhX4ppUCHb_0B_QQkd0GegQIORAB#fpstate=tldetail&sxsrf=AOaemvIxuJXh3if0tw7ezZfjkXRe5DSxsA:1632911697417&htivrt=jobs&htidocid=N1_BNfzt8n8auXjGAAAAAA%3D%3D")

# 初始化页面高度
last_height = driver.execute_script("return document.body.scrollHeight")

while True:
    # 用JavaScript滚动到当前页面底部(比send_keys更可靠)
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    
    # 等待新内容加载,时间可以根据你的网络情况调整(2-5秒都可以)
    time.sleep(3)
    
    # 获取更新后的页面高度
    new_height = driver.execute_script("return document.body.scrollHeight")
    
    # 如果高度没有变化,说明已经到底了,退出循环
    if new_height == last_height:
        break
    
    # 更新高度,继续循环
    last_height = new_height

方案2:直接滚动职位列表容器(更精准)

有时候Google Jobs的滚动区域是独立的列表容器,不是整个页面。你可以直接定位到这个容器,滚动它的内部:

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.google.com/search?q=upsc+jobs+in+india&rlz=1C1CHBF_enIN869IN869&oq=upsc+jo&aqs=chrome.1.69i57j0i433i512j0i131i433i512j0i512l3j0i131i433i512l2j0i512j0i433i512&sourceid=chrome&ie=UTF-8&ibp=htl;jobs&sa=X&sqi=2&ved=2ahUKEwjR27GN_qPzAhX4ppUCHb_0B_QQkd0GegQIORAB#fpstate=tldetail&sxsrf=AOaemvIxuJXh3if0tw7ezZfjkXRe5DSxsA:1632911697417&htivrt=jobs&htidocid=N1_BNfzt8n8auXjGAAAAAA%3D%3D")

# 定位职位列表的容器(selector可能会变,建议用浏览器开发者工具确认)
job_list_container = driver.find_element_by_css_selector("div[aria-label='Jobs list']")

last_container_height = driver.execute_script("return arguments[0].scrollHeight", job_list_container)

while True:
    # 滚动容器到底部
    driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", job_list_container)
    
    time.sleep(3)
    
    new_container_height = driver.execute_script("return arguments[0].scrollHeight", job_list_container)
    
    if new_container_height == last_container_height:
        break
    
    last_container_height = new_container_height

方案3:结合显式等待(更智能)

用固定的time.sleep()不够灵活,换成显式等待可以让代码根据页面加载状态自动调整等待时间,网络快的时候更快,网络慢的时候也不会提前结束:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Chrome()
driver.get("https://www.google.com/search?q=upsc+jobs+in+india&rlz=1C1CHBF_enIN869IN869&oq=upsc+jo&aqs=chrome.1.69i57j0i433i512j0i131i433i512j0i512l3j0i131i433i512l2j0i512j0i433i512&sourceid=chrome&ie=UTF-8&ibp=htl;jobs&sa=X&sqi=2&ved=2ahUKEwjR27GN_qPzAhX4ppUCHb_0B_QQkd0GegQIORAB#fpstate=tldetail&sxsrf=AOaemvIxuJXh3if0tw7ezZfjkXRe5DSxsA:1632911697417&htivrt=jobs&htidocid=N1_BNfzt8n8auXjGAAAAAA%3D%3D")

wait = WebDriverWait(driver, 10)  # 最多等待10秒
last_height = driver.execute_script("return document.body.scrollHeight")

while True:
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    
    try:
        # 等待页面高度增加(说明新内容加载完成)
        wait.until(lambda d: driver.execute_script("return document.body.scrollHeight") > last_height)
    except:
        # 超时说明没有新内容了,退出循环
        break
    
    last_height = driver.execute_script("return document.body.scrollHeight")

小提示

  • 不要把等待时间设得太短,否则可能触发Google的反爬机制,也会导致内容加载不充分。
  • 如果selector失效了,打开浏览器开发者工具,重新定位职位列表容器的元素即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 15:42:41