Selenium运行报TimeoutException异常无法获取番剧标题该如何修复
修复方案
问题根源
触发超时的核心原因是By.CLASS_NAME定位规则不支持传入带空格的多类名组合,只能传入单个类名,你的代码里三次类名定位都用了多类名拼接的字符串,所以永远找不到匹配元素,和超时时间长短无关。
具体修复点
- 所有多类名定位改用
By.CSS_SELECTOR,类名前加.,空格替换为.即可匹配同时包含所有类的元素 - 适配高版本Selenium的元素定位语法,弃用已经被移除的
find_elements_by_class_name这类旧API - 增加页面加载完成后滚动到底部的逻辑,触发懒加载的番剧内容渲染(该站点番剧列表是懒加载的,不滚动不会渲染全部内容)
修复后完整代码
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 import time url ='https://animelon.com/' PATH = 'C:\Program Files (x86)\chromedriver.exe' # 高版本Selenium可以不用手动指定chromedriver路径,会自动匹配,如果你是旧版本保留原写法即可 driver = webdriver.Chrome() driver.get(url) driver.maximize_window() try: # 滚动到底部触发懒加载 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(2) # 改用CSS_SELECTOR匹配多类名 section = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, '.row.ng-show-toggle-slidedown.series-content-container')) ) anime = section.find_elements(By.CSS_SELECTOR, '.col-lg-3.col-md-4.col-sm-6.col-xs-12.mini-previews.ng-scope') for show in anime: header = show.find_element(By.CSS_SELECTOR, '.anime-name.ng-binding') print(header.text) finally: driver.quit()
补充说明
如果运行时还是有部分内容没加载出来,可以增加滚动次数或者延长sleep的时间,确保所有懒加载资源都渲染完成再定位元素。
内容的提问来源于stack exchange,提问作者DevJannes
相关产品推荐
相关产品推荐

