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

Selenium按类名选取元素时出现索引越界异常问题

问题原因

  • find_elements_by_class_name 会匹配整个页面所有带有对应类名的元素,不局限于你要提取数据的大学排名表格。该站点除了排名表格的tr标签用了odd/even类,页面其他区域(比如侧边栏、其他功能模块、表头附属结构)的元素也可能使用这两个类名,这些非表格的even类元素内部没有你要的td[1]/strong结构,所以调用find_elements_by_xpath会返回空列表,取[0]就会抛出索引越界错误。
  • 你打印elementsEven[0]时,只是打印Selenium元素对象本身,只要元素存在就不会报错,只有当你访问它内部不存在的子元素时才会触发错误。前3个even类元素都是页面其他区域的无效元素,所以从下标3开始才是排名表格里的有效大学条目。

优化方案

不要直接全局搜索类名,先定位到目标排名表格,再在表格范围内筛选tr元素,避免拿到无关元素,后续就不用处理下标偏移的问题,代码稳定性更高。

优化参考代码:

import csv
import os
from dotenv import load_dotenv
from time import sleep
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
from msedge.selenium_tools import Edge, EdgeOptions # Microsoft Edge 

# 初始化Edge浏览器
options = EdgeOptions()
options.use_chromium = True
driver = Edge(executable_path='./edgedriver_win32/msedgedriver.exe', options=options)

driver.get("https://www.timeshighereducation.com/news/top-100-most-influential-uk-and-us-universities-on-twitter/2013373.article")
# 增加等待时间确保页面加载完成,也可以换成显式等待逻辑
sleep(3)

# 先定位到目标排名表格,缩小搜索范围
target_table = driver.find_element_by_xpath("//table[.//th[contains(text(),'University')]]")
# 在表格范围内找odd、even类的tr
elementsOdd = target_table.find_elements_by_class_name("odd")
elementsEven = target_table.find_elements_by_class_name("even")

# 现在elementsOdd和elementsEven里就只有表格内的大学条目,直接从0开始访问即可
card = elementsOdd[0]
text = card.find_elements_by_xpath("./td[1]/strong")[0].text
split_text = text.split("\n")
university_name, university_twitter_tag = split_text[0], split_text[1]
print(university_name + " " + university_twitter_tag)

card2 = elementsEven[0]
text2 = card2.find_elements_by_xpath("./td[1]/strong")[0].text
split_text2 = text2.split("\n")
university_name2, university_twitter_tag2 = split_text2[0], split_text2[1]
print(university_name2 + " " + university_twitter_tag2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:36:03