Selenium获取表格行仅返回前70行的原因及解决方法
解决Selenium仅能抓取表格前70行数据的问题
这种情况几乎都是表格采用了懒加载/滚动加载机制——只有行元素进入浏览器可视区域后才会被渲染到DOM里,超出范围的行暂时不会加载,所以find_elements只能抓到已经渲染的前70行。调整缩放比例没用,说明问题不在可视区域高度,而是网站本身的加载逻辑。
下面是具体的解决思路和代码:
方法1:滚动表格容器触发全部行加载
直接滚动表格的专属滚动容器(别滚整个页面,避免干扰其他元素),循环执行直到获取的行数不再增加:
# 先定位表格的滚动父容器(需要替换成你页面中实际的滚动容器XPATH) scroll_container = driver.find_element(By.XPATH, "替换为表格滚动容器的XPATH") previous_count = 0 while True: # 获取当前已加载的行 grid_rows = driver.find_elements(By.XPATH, "/html/body/div[1]/div[3]/div/div[2]/div/div/div[2]/div[1]/div[2]/div[1]/div[2]/div[1]/div/div[3]/div/div[2]/div/div/div[2]/div[1]/div[3]/div[1]/div[2]/div[1]/div/div[3]/ptcs-tab-set/ptcs-mb-container/div/div[1]/div[1]/div[1]/div[1]/div[1]/div/div[3]/div[2]/div[2]/table/tbody/tr") current_count = len(grid_rows) if current_count == previous_count: # 行数不再变化,说明所有行都加载完了 break previous_count = current_count # 滚动到容器底部触发加载 driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scroll_container) time.sleep(2) # 等待加载,根据网站速度调整时长 print(f"最终获取到{len(grid_rows)}行数据")
方法2:替换脆弱的绝对XPATH
你现在用的是绝对XPATH,页面结构稍微变动就会失效,建议改成相对路径,比如通过表格的唯一标识定位:
# 假设表格有唯一class,比如class="data-grid-table" grid_rows = driver.find_elements(By.CSS_SELECTOR, ".data-grid-table tbody tr")
或者通过表格的标题、属性等特征定位,稳定性会高很多。
方法3:检查是否有分页/加载更多按钮
部分表格不会滚动加载,而是用分页或「加载更多」按钮控制数据展示,这种情况需要模拟点击按钮,直到所有数据加载完成。
额外优化提示:
- 别依赖固定的
time.sleep(),改用WebDriverWait等待元素加载,脚本更稳定:from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待行元素加载完成 WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.XPATH, "你的行元素XPATH"))) - 优先滚动表格自身的滚动容器,不要直接滚整个页面,防止影响其他元素的正常加载。
内容的提问来源于stack exchange,提问作者user9811289
相关产品推荐
相关产品推荐

