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

如何用Selenium循环点击IMDB的「加载50条更多」按钮直至加载全部数据

解决IMDB页面循环点击「加载50条更多」按钮的问题

原代码的核心问题

  1. 未导入TimeoutException,捕获异常时会触发未定义错误
  2. 按钮处于页面底部,未滚动至可见区域时无法触发点击
  3. 定位方式不够精准,且混用隐式等待与显式等待易导致逻辑混乱

修正后的代码

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 selenium.common.exceptions import TimeoutException, ElementClickInterceptedException

url = "https://www.imdb.com/search/title/?title_type=tv_series&release_date=2016-01-01,2024-12-01&sort=release_date,desc&countries=KR"

driver = webdriver.Chrome()
driver.get(url)
driver.maximize_window()  # 最大化窗口避免元素被遮挡

try:
    while True:
        try:
            # 等待加载按钮出现并滚动至可见区域
            more_button = WebDriverWait(driver, 10).until(
                EC.presence_of_element_located((By.XPATH, '//button[contains(@class, "ipc-see-more__button") and contains(text(), "Load 50 more")]'))
            )
            # 滚动到按钮位置,确保可点击
            driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", more_button)
            
            # 等待按钮可点击后点击
            WebDriverWait(driver, 5).until(
                EC.element_to_be_clickable((By.XPATH, '//button[contains(@class, "ipc-see-more__button") and contains(text(), "Load 50 more")]'))
            ).click()
            
            # 等待新内容加载完成(通过等待列表元素数量变化实现)
            current_count = len(driver.find_elements(By.CLASS_NAME, "ipc-metadata-list-summary-item"))
            WebDriverWait(driver, 15).until(
                lambda d: len(d.find_elements(By.CLASS_NAME, "ipc-metadata-list-summary-item")) > current_count
            )
            
        except (TimeoutException, ElementClickInterceptedException):
            # 按钮不存在或无法点击时退出循环
            break

finally:
    driver.quit()

关键优化点说明

  • 导入必要异常类:新增ElementClickInterceptedException处理按钮被遮挡的情况
  • 滚动至元素可见:用execute_script强制滚动到按钮位置,解决因元素在视口外无法点击的问题
  • 精准定位按钮:结合按钮class和文本内容编写XPath,避免因class变更导致定位失败
  • 等待内容加载完成:通过监听列表元素数量变化,确保新数据加载完成后再进行下一次循环
  • 最大化窗口:减少因页面布局问题导致的元素遮挡

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 16:51:32