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

Python爬取网站记录时Selenium自动滚动无法到底部仅获取122条数据如何解决

问题排查与修复方案

核心问题原因

  • 滚动等待时间SCROLL_PAUSE_TIME = 1设置过短,该网站懒加载资源渲染速度慢,1秒内新内容还没加载完成,滚动高度不会发生变化,导致循环提前终止
  • 滚动退出逻辑有缺陷:单次滚动高度不变就直接退出,没有预留重试机制,遇到网络卡顿临时加载失败就会直接停止滚动
  • 未适配部分站点的懒加载触发规则:部分站点需要最大化窗口、滚动位置完全触底才会触发下一页内容加载,原有代码没有兼容这类场景

修复后的可运行代码

import time
import pandas as pd
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service

url ='https://dawaai.pk/medicine-category/alimentary-tract-metabolism-2'
# 新版本selenium的驱动写法,旧版本可换回你原来的写法
driver = webdriver.Chrome(service=Service('E:/chromedriver'))
driver.maximize_window() # 最大化窗口避免布局异常影响懒加载触发
driver.get(url)
SCROLL_PAUSE_TIME = 3 # 延长等待时间到3秒,可根据自身网络情况调整
# 增加重试计数,连续3次滚动高度不变才判定为到达底部
retry_count = 0
MAX_RETRY = 3

last_height = driver.execute_script("return document.documentElement.scrollHeight")

while True:
    # 滚动到页面最底部
    driver.execute_script("window.scrollTo(0, document.documentElement.scrollHeight);")
    time.sleep(SCROLL_PAUSE_TIME)
    new_height = driver.execute_script("return document.documentElement.scrollHeight")
    
    if new_height == last_height:
        retry_count += 1
        if retry_count >= MAX_RETRY:
            print("已到页面最底部,退出滚动")
            break
        # 高度不变时多等2秒再重试,避免网络波动导致误判
        time.sleep(2)
    else:
        retry_count = 0
        last_height = new_height

# 全部滚动完成后一次性解析页面,不需要滚动一次解析一次
pageSource = driver.page_source
soup = BeautifulSoup(pageSource, 'html.parser')
aaa = soup.find('div',class_='columns systemic-products-div')  
conte = aaa.find_all('div',class_='column col-3 mb-20')

suit = []
for items in conte:
    product_title = items.find("h2").text.strip()
    product_Brand_Name = items.find("p").text.strip()
    fabric = {
        'productname':product_title,
        'Product_Brand_Name':product_Brand_Name
    }
    suit.append(fabric)

print(f"共抓取到{len(suit)}条记录,正在导入CSV文件...")
df = pd.DataFrame(suit)
df.to_csv('dawaii.csv', index=False)
print("保存成功")
driver.quit()

额外调整建议

  • 如果调整后还是有内容加载不全,可以把SCROLL_PAUSE_TIME再调高到4-5秒,适配你的网络环境
  • 可以在driver.get(url)后额外加3秒等待,保证首屏资源完全加载完成再开始滚动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:36:03