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

如何用Selenium实现Google Maps结果滚动加载?求助获取20所伦敦工程学校

解决Google Maps Selenium滚动加载更多结果的问题

Google Maps的搜索结果采用动态懒加载机制,只有当结果项进入可视区域时才会加载新内容,所以你需要定位结果列表的滚动容器,通过循环滚动触发加载,直到获取到至少20条结果。

修改后的完整代码

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

chrome_options = Options()
chrome_options.add_experimental_option("detach", True)

driver = webdriver.Chrome(options=chrome_options)

driver.get("https://www.google.com/")
driver.find_element(By.ID, "L2AGLb").click()

driver.get("https://www.google.com/maps")

# 等待搜索框加载
time.sleep(3)

# 搜索伦敦的工程学校
search_box = driver.find_element(By.ID, "searchboxinput")
search_box.send_keys("engineering school in london")
search_box.send_keys(Keys.RETURN)

# 等待初始结果加载
time.sleep(5)

# 定位结果滚动容器(Google Maps的结果列表容器)
results_container = driver.find_element(By.XPATH, "//div[@role='feed']")

# 循环滚动直到获取至少20条结果
target_count = 20
while True:
    # 获取当前已加载的结果数量
    results = driver.find_elements(By.XPATH, "//a[@class='hfpxzc']")
    if len(results) >= target_count:
        break
    
    # 滚动到容器底部,触发加载更多
    driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", results_container)
    # 等待新内容加载
    time.sleep(2)

# 输出前20条结果
for i, result in enumerate(results[:target_count], start=1):
    print(f"Result {i}: {result.get_attribute('aria-label')}")

driver.quit()

关键修改说明

  • 定位滚动容器:通过//div[@role='feed']定位Google Maps的结果列表容器,这是负责滚动加载的核心元素
  • 循环滚动逻辑:每次滚动到容器底部后,等待2秒让新内容加载,然后检查结果数量是否达标
  • 终止条件:当结果数量达到或超过20时,停止滚动,避免不必要的重复操作

额外提示

  • 可以把time.sleep()替换为Selenium的显式等待(WebDriverWait),让代码更稳定,比如等待新结果元素出现后再继续滚动
  • 如果滚动多次后结果数量不再增加,说明已加载完所有结果,此时可以提前终止循环

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 07:11:30