如何用Selenium+Python实现网页连续加载并解决加载失效问题
解决Selenium点击LOAD MORE后未加载新内容的问题
核心问题分析
你遇到的情况是点击"LOAD MORE"后页面未实际加载新内容,直接统计元素数量自然和点击前一致。主要原因是点击操作后没有等待页面完成异步加载,或者按钮点击时机不对、Cookie弹窗隐性干扰了交互。
具体解决方案
1. 先处理Cookie弹窗
即使你觉得弹窗不影响,它可能会占据页面焦点或干扰JS事件触发,建议先关闭:
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 # 初始化Chrome驱动 driver = webdriver.Chrome() driver.get("https://partechpartners.com/companies") # 等待Cookie弹窗并点击同意按钮 try: accept_cookie_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), 'Accept')]")) ) accept_cookie_btn.click() except: # 若弹窗未出现,直接跳过 pass
2. 循环点击LOAD MORE并等待加载完成
单次点击仅加载一页内容,且必须等待新元素加载完成后再继续操作:
# 记录初始元素数量 current_count = len(driver.find_elements(By.XPATH, "//h2")) while True: try: # 等待LOAD MORE按钮可点击 load_more_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), 'LOAD MORE')]")) ) # 滚动到按钮位置,避免被页面元素遮挡导致点击失败 driver.execute_script("arguments[0].scrollIntoView(true);", load_more_btn) load_more_btn.click() # 等待元素数量增加,确保新内容加载完成 WebDriverWait(driver, 15).until( lambda d: len(d.find_elements(By.XPATH, "//h2")) > current_count ) # 更新当前计数 current_count = len(driver.find_elements(By.XPATH, "//h2")) print(f"当前已加载 {current_count} 条数据") except: # 按钮消失或不可点击,说明所有内容加载完成 print("全部内容加载完毕") break # 最终统计总数据量 final_count = len(driver.find_elements(By.XPATH, "//h2")) print(f"总数据条数:{final_count}") driver.quit()
3. 额外优化点
- 避免使用
time.sleep()硬等待,优先用WebDriverWait显式等待,既稳定又节省时间。 - 若使用无头模式,需添加窗口大小参数,避免页面布局异常导致元素无法定位:
options = webdriver.ChromeOptions() options.add_argument("--headless=new") options.add_argument("--window-size=1920,1080") driver = webdriver.Chrome(options=options)
内容的提问来源于stack exchange,提问作者tktk234
相关产品推荐
相关产品推荐

