加载超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
相关产品推荐
相关产品推荐

