Selenium中find_elements_by_class_name失效及语法错误问题求助
Selenium元素定位错误排查与解决方案
错误原因分析
- 旧版定位方法已废弃:Selenium 4+ 移除了
find_elements_by_class_name()这类直接调用的定位方法,统一改用find_elements()配合By类的标准写法 - 参数语法错误:
driver.find_elements(By = 'class_name','category-page__member-link')违反Python语法规则,关键字参数不能出现在位置参数之前 - 定位方式选错:
By.NAME是根据元素的name属性定位,但目标元素的标识是类名category-page__member-link,对应定位方式应为By.CLASS_NAME
正确解决方案
1. 修正元素定位代码
将原有错误的定位代码替换为以下正确写法:
book_categories = driver.find_elements(By.CLASS_NAME, 'category-page__member-link')
也可使用CSS选择器实现相同定位效果:
book_categories = driver.find_elements(By.CSS_SELECTOR, '.category-page__member-link')
2. 页面加载优化(可选)
页面可能存在异步加载导致元素未及时渲染的情况,建议添加显式等待确保元素加载完成:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 最多等待10秒,直到目标元素组出现 book_categories = WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.CLASS_NAME, 'category-page__member-link')) )
完整修正代码示例
import pandas as pd import time import selenium from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import seaborn as sns import os import logging PATH = 'C:/Program Files/chromedriver/chromedriver.exe' options = Options() driver = webdriver.Chrome(service=Service(PATH)) page_url = "https://witcher.fandom.com/wiki/Category:Characters_in_the_stories" driver.get(page_url) # 等待元素加载并定位 book_categories = WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.CLASS_NAME, 'category-page__member-link')) ) # 测试输出结果 for item in book_categories: print(item.text, item.get_attribute('href')) driver.quit()
版本兼容性说明
你的ChromeDriver(109.0.5414.74)与Chrome浏览器(109.0.5414.75)版本匹配,不存在版本不兼容问题,无需更换驱动。
内容的提问来源于stack exchange,提问作者Olga Klishchuk
相关产品推荐
相关产品推荐

