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

使用Selenium如何点击所有文本为'08/28'的span元素?

问题核心原因

你代码的核心问题是调用了错误的元素查找方法:

  • find_element_by_xpath 仅返回匹配XPath规则的第一个元素,本身不是可迭代对象,遍历会直接抛出类型错误。要获取所有匹配的元素,必须使用find_elements_by_xpath方法,该方法返回所有符合条件的元素列表,支持遍历操作。
  • 你的代码缺失time模块导入,执行到time.sleep时会抛出未定义错误。

修改后的完整代码

import scrapy
import time
from selenium import webdriver

class CenturyasiaxinbeiSpider(scrapy.Spider):
    name = 'CenturyasiaXinbei'
    allowed_domains = ['www.centuryasia.com.tw', '211.21.63.217:81']
    start_urls = ['http://211.21.63.217:81/ticket_online.aspx']

    def __init__(self):
        print('__init__')
        self.driver = webdriver.Chrome('/Users/motogod19/chromedriver')
        self.driver.get('http://211.21.63.217:81/ticket_online.aspx')

    def parse(self, response):
        # 使用find_elements获取所有文本为08/28的span元素
        allSpanDate = self.driver.find_elements_by_xpath("//span[text()='08/28']")
        for spanDate in allSpanDate:
            # 可选:如果元素不在可视区域,先滚动到元素位置再点击避免报错
            self.driver.execute_script("arguments[0].scrollIntoView();", spanDate)
            spanDate.click()
        time.sleep(10)

特殊场景适配

如果点击部分元素后页面发生DOM刷新、元素重绘,之前获取的allSpanDate列表会失效,抛出StaleElementReferenceException错误,这种情况可以改成按索引循环重新获取元素:

def parse(self, response):
    # 先获取匹配元素总数量
    span_count = len(self.driver.find_elements_by_xpath("//span[text()='08/28']"))
    for i in range(span_count):
        # 每次点击前重新获取最新的元素列表
        spanDate = self.driver.find_elements_by_xpath("//span[text()='08/28']")[i]
        self.driver.execute_script("arguments[0].scrollIntoView();", spanDate)
        spanDate.click()
    time.sleep(10)

Selenium 4.0+ 版本适配

如果你的Selenium版本为4.0及以上,find_elements_by_xpath方法已被官方废弃,需要改用以下写法:

  1. 先导入By类:
from selenium.webdriver.common.by import By
  1. 替换元素查找代码:
allSpanDate = self.driver.find_elements(By.XPATH, "//span[text()='08/28']")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:54:03