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

Selenium Python遍历电影列表异常:无法选中首个元素

解决Selenium遍历电影列表从第一部到最后一部的问题

嘿,我来帮你搞定这个遍历电影的问题!先看看你代码里的核心问题:你现在只拿到了单个电影元素,而且点击后没回到列表页,自然没法按顺序遍历所有电影。下面是修改后的完整代码,我会一步步给你讲清楚改动点:

from selenium import webdriver
import time

URL = 'https://www.cineplanet.cl/peliculas'
# 更精准定位"加载更多"按钮,避免误点其他按钮
XPATH_VER_MAS_PELICULAS = '//button[contains(text(), "Ver más películas")]'
CLASS_CARTELERA = 'movie-info-details'
# 用相对路径定位按钮,确保只在当前电影条目下查找
XPATH_COMPRAR = './/div[@class="movie-info-details--wrapper"]/div[@class="movie-info-details--first-button-wrapper"]/button'
PATH = 'C:\\Program Files\\chrome-driver\\chromedriver.exe'

driver = webdriver.Chrome(PATH)
driver.get(URL)

def available_movies():
    try:
        # 关键:获取所有电影条目,而不是单个
        all_movies = driver.find_elements_by_class_name(CLASS_CARTELERA)
        print(f"一共找到{len(all_movies)}部电影")
        
        # 从第一部开始逐个遍历
        for idx, movie in enumerate(all_movies):
            print(f"正在处理第{idx+1}部电影")
            # 找到当前电影的操作按钮
            buy_btn = movie.find_element_by_xpath(XPATH_COMPRAR)
            buy_btn.click()
            
            # 等待详情页加载,然后返回列表页
            time.sleep(3)
            driver.back()
            time.sleep(2)  # 等列表页加载稳定,避免下一次找不到元素
            
    except Exception as e:
        print(f"操作时出了点小问题:{str(e)}")

# 先把所有电影加载出来
while True:
    try:
        ver_mas_btn = driver.find_element_by_xpath(XPATH_VER_MAS_PELICULAS)
        ver_mas_btn.click()
        time.sleep(5)
    except:
        print("所有电影都加载完成啦")
        break

# 开始按顺序遍历电影
available_movies()

time.sleep(2)
driver.quit()

核心改动说明:

  1. 获取所有电影条目:把driver.find_element_by_class_name改成driver.find_elements_by_class_name,这样就能拿到页面上所有的电影元素列表,而不是只拿第一个。
  2. 相对路径定位按钮:给XPATH_COMPRAR开头加了.,变成相对路径,确保只在当前电影元素下找按钮,不会误点其他电影的按钮。
  3. 返回列表页:点击进入详情页后,用driver.back()回到电影列表,这样才能继续处理下一部电影。
  4. 精准定位加载按钮:原XPATH匹配所有按钮,容易误点,改成匹配带"Ver más películas"文本的按钮,避免出错。

额外小建议:

如果想让代码更稳定,尽量用WebDriverWait显式等待代替固定的time.sleep,比如等待元素可点击再操作:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 示例:等待按钮可点击
buy_btn = WebDriverWait(movie, 10).until(
    EC.element_to_be_clickable((By.XPATH, XPATH_COMPRAR))
)
buy_btn.click()

这样能避免因为页面加载慢导致的元素找不到问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:19:25