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

Selenium Python如何使用find_elements_by_class_name点击目标元素

问题原因

你当前用find_elements_by_class_name('test-section-container')查找的是外层大容器元素,从给出的HTML结构来看,页面里只有1个test-section-container类的元素,所以返回的results列表长度只有1,调用results[1]自然会报数组越界错误。你之前点击results[0]能跳转到第一篇文章,是因为点击容器时触发了内部第一个可点击子元素的事件而已。

解决方法

你应该定位test-section-container内部的可点击子条目元素,代码修改如下:

driver.get("http://www.testwesbite.org/#/newsarticles")
# 先拿到外层容器
section_container = driver.find_element_by_class_name('test-section-container')
# 查找容器内所有可点击的新闻条目,这里用xpath匹配带cursor:pointer样式的子div,也可以根据实际结构调整定位规则
news_items = section_container.find_elements_by_xpath('./div[contains(@style,"cursor: pointer")]')

# 点击第二篇直接取索引1即可
# 如果需要先点第一篇再点第二篇,记得加返回上一页和元素加载等待的逻辑
# news_items[0].click()
# driver.back()
# 等待页面加载完成后再点击第二篇
news_items[1].click()

补充说明

如果页面是动态加载的,建议在查找元素前增加显式等待,避免元素还没加载完成就查找导致返回空列表:

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

# 等待外层容器加载完成
wait = WebDriverWait(driver, 10)
section_container = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'test-section-container')))

如果子div的样式可能变动,也可以换其他定位规则,比如匹配包含新闻标题和日期的父div,只要能准确识别到每一条新闻的外层可点击元素即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:45:03