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

如何在Selenium(Python)中遍历表格行并点击链接?

解决Selenium遍历点击元素时的AttributeError问题

嘿,我来帮你搞定这个问题!首先咱们先把错误原因说清楚:你用driver.find_elements_by_xpath()拿到的table是一个元素列表,而列表本身没有find_element_by_xpath这个方法,这就是你报错的直接原因。另外还有个容易踩坑的点:你写的xpath是绝对路径(没有.前缀),就算你能遍历table,每次也会找到页面上第一个符合条件的元素,而不是当前table下面的子元素。

下面是修正后的代码,我把所有需要注意的点都标出来了:

import time
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

driver = webdriver.Firefox()
url = 'here://code.above.com/'
driver.get(url)

# 先等页面加载完,确保目标元素都出来了,避免找不到元素的问题
wait = WebDriverWait(driver, 10)
tables = wait.until(EC.presence_of_all_elements_located((By.XPATH, "//table[@class='foot-market']")))

# 遍历每个table
for table in tables:
    # 重点:用.开头的相对xpath,只在当前table下找tbody
    tbodies = table.find_elements(By.XPATH, ".//tbody[@data-live='false']")
    for tbody in tbodies:
        # 同样用相对xpath找当前tbody下的可点击td
        td_element = tbody.find_element(By.XPATH, ".//td[@class='today-name']")
        td_element.click()
        
        # 点击后等页面跳转完成,再返回上一页
        time.sleep(2)  # 这里也可以用WebDriverWait等特定元素,比硬等更靠谱
        driver.back()
        
        # 返回后要等页面重新加载好,不然下一次找元素会出错
        wait.until(EC.presence_of_all_elements_located((By.XPATH, "//table[@class='foot-market']")))
    
    # 如果只是测试第一个table,取消下面的注释就行
    # break

driver.quit()

几个关键的改进细节:

  • 相对路径xpath:一定要在xpath前面加.,意思是“从当前元素的子节点开始找”,这样才能精准定位到当前表格/tbody下面的元素,不会每次都去页面最开头找第一个匹配的元素。
  • 弃用API替换:find_elements_by_xpath这类旧API已经被Selenium弃用了,现在推荐用find_elements(By.XPATH, ...)的写法,兼容性更好。
  • 显式等待:用WebDriverWait代替单纯的time.sleep(),可以更智能地等待元素加载完成,避免因网络慢或页面渲染慢导致的报错。
  • 遍历逻辑修正:先遍历所有table,再遍历每个table下的tbody,最后找到对应的可点击td,点击后返回并重新等待页面加载,确保后续操作正常。

如果还有其他问题,比如点击后页面跳转异常,或者元素找不到,都可以再调整等待逻辑或者xpath哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:37:12