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

求助:Python Selenium实现谷歌地图无限滚动的可行方案

谷歌地图Selenium无限滚动问题解决方案

原代码存在的问题

  • 硬编码的XPATH依赖动态生成的页面ID,谷歌地图页面结构更新后直接失效
  • 通过page_source判断滚动到底的方式不可靠,目标文本可能被动态渲染或隐藏
  • 固定time.sleep容错性差,页面加载慢时会导致元素未就绪就执行后续操作

可行解决方案

改用相对定位定位滚动容器,结合显式等待和更可靠的滚动结束判断逻辑,同时用模拟按键替代直接修改scrollTop(更贴近用户真实操作,降低被反爬拦截的概率):

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def load_companies(self, url):
    print("Getting business info", url)
    self.driver.get(url)
    # 显式等待滚动容器加载完成
    scrollable_div = WebDriverWait(self.driver, 10).until(
        EC.presence_of_element_located(
            (By.CSS_SELECTOR, 'div[role="feed"]')
        )
    )
    # 滚动逻辑
    last_height = self.driver.execute_script('return arguments[0].scrollHeight', scrollable_div)
    while True:
        # 模拟按PAGE_DOWN键滚动,贴近真实用户操作
        scrollable_div.send_keys(Keys.PAGE_DOWN)
        # 等待新内容加载完成
        WebDriverWait(self.driver, 5).until(
            lambda d: self.driver.execute_script('return arguments[0].scrollHeight', scrollable_div) > last_height
        )
        new_height = self.driver.execute_script('return arguments[0].scrollHeight', scrollable_div)
        
        # 抓取当前页面的商家信息
        self.get_business_info()
        
        # 判断是否滚动到底:检查末尾提示元素
        try:
            end_element = self.driver.find_element(By.CSS_SELECTOR, 'div.fontBodySmall')
            if "已浏览至列表末尾" in end_element.text:
                break
        except:
            pass
        
        # 备用判断:如果容器高度不再变化,视为滚动到底
        if new_height == last_height:
            break
        last_height = new_height

关键改进点

  • 用CSS选择器div[role="feed"]定位滚动容器,比固定XPATH更适配页面结构更新
  • 用显式等待替代固定sleep,确保元素就绪后再执行操作,提升稳定性
  • 模拟PAGE_DOWN按键滚动,避免直接操作DOM触发反爬机制
  • 双重判断滚动到底:同时检查末尾提示文本和容器高度变化,避免单一判断失效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 10:35:13