使用Selenium Python实现多页面(分页)文本提取
动态分页数据提取解决方案
针对你只能提取第一页数据的问题,可通过循环遍历分页按钮的方式自动处理所有页面数据,核心逻辑为:提取当前页数据 → 点击下一页按钮 → 重复操作直至无下一页可点击。
修改后的完整代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from webdriver_manager.chrome import ChromeDriverManager from selenium.common.exceptions import ElementNotInteractableException, StaleElementReferenceException, TimeoutException def extract_current_page_data(driver): """提取当前页面目标数据""" WebDriverWait(driver, 50).until(EC.presence_of_element_located((By.ID, 'all-my-groups'))) elements = driver.find_elements(By.XPATH, "//div[contains(@class, 'alias-wrapper sim-ellipsis sim-list--shortId')]") return [elem.text for elem in elements] # 初始化浏览器 opts = webdriver.ChromeOptions() opts.headless = True driver = webdriver.Chrome(ChromeDriverManager().install()) base_url = "XYZ" driver.maximize_window() driver.get(base_url) driver.set_page_load_timeout(50) all_data = [] while True: # 提取当前页数据并汇总 current_page_data = extract_current_page_data(driver) all_data.extend(current_page_data) # 打印当前页数据(可选) for item in current_page_data: print(item) try: # 等待下一页按钮可点击并点击,需根据实际分页按钮属性调整XPATH next_page_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), '下一页') or contains(@class, 'pagination-next')]")) ) next_page_btn.click() # 等待页面刷新,避免元素失效 WebDriverWait(driver, 10).until( EC.staleness_of(driver.find_element(By.ID, 'all-my-groups')) ) except (ElementNotInteractableException, StaleElementReferenceException, TimeoutException): # 无下一页时退出循环 break driver.quit() # 打印所有提取的数据 print("\n所有提取的数据:") for item in all_data: print(item)
关键说明
- 函数封装:将单页数据提取逻辑封装,简化重复代码。
- 循环控制:通过
while True持续处理分页,捕获异常终止循环。 - 元素等待:用
WebDriverWait确保页面元素加载完成,避免因未刷新导致的元素丢失问题。 - XPATH适配:需根据你截图里的分页按钮实际HTML属性(如文本、class)调整
next_page_btn的XPATH,可通过浏览器开发者工具查看按钮属性。
内容的提问来源于stack exchange,提问作者Siva
相关产品推荐
相关产品推荐

