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

加载超500条Google评论时Selenium驱动崩溃,原因何在?

Google商家评论抓取时Tab崩溃的问题解析

错误原因

这个错误核心不是Selenium不支持长滚动,而是以下几个因素导致:

  • 浏览器内存过载:每加载一条评论就会新增一组DOM元素,当滚动到500+条时,页面累积的DOM节点过多,Chrome单标签页的内存占用超过阈值,直接触发标签崩溃。
  • 滚动逻辑过于激进:你的代码是一次性滚动到底部,没有给浏览器留渲染和内存清理的时间,短时间内密集加载大量评论,进一步推高内存占用。
  • Google反爬机制触发:快速、无停顿的滚动行为会被Google判定为异常爬虫操作,可能通过终止标签页来限制访问。

解决办法

1. 给滚动加停顿,放缓加载节奏

修改循环逻辑,每次滚动后等待几秒,让浏览器有时间处理新加载的内容,同时增加“评论数量不再变化则停止”的判断,避免无效滚动:

import time

all_reviews_div = self.driver.find_element_by_class_name("review-dialog-list")
last_count = 0
while True:
    # 滚动到评论区底部
    self.driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", all_reviews_div)
    # 等待2秒,让评论加载完成
    time.sleep(2)
    all_reviews = all_reviews_div.find_elements_by_class_name('gws-localreviews__google-review')
    current_count = len(all_reviews)
    
    sys.stdout.write("\r滚动中:已加载{}条评论 / 目标{}条".format(current_count, self.total_reviews))
    sys.stdout.flush()
    
    # 如果连续两次数量不变,说明没有更多评论了
    if current_count == last_count:
        break
    last_count = current_count
    
    # 达到目标数量就停止
    if current_count == self.total_reviews or current_count >= 1200:
        break

2. 配置浏览器参数降低内存消耗

启动Chrome时添加这些参数,减少不必要的资源占用:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
# 禁用图片加载,节省内存和带宽
chrome_options.add_argument('--blink-settings=imagesEnabled=false')
# 启用无头模式(可选,比有头模式内存占用低)
chrome_options.add_argument('--headless=new')
# 禁用GPU加速,避免额外内存开销
chrome_options.add_argument('--disable-gpu')
# 解决Linux环境下的内存共享问题
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--no-sandbox')

driver = webdriver.Chrome(options=chrome_options)

3. 分批抓取清理DOM

如果目标评论数接近1200,可以每抓取200-300条后,刷新页面重新定位评论区继续滚动,避免DOM元素一直累积在页面里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 12:45:34