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

