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

Selenium Python:如何将日期字符串转为可比较的日期变量?

日期字符串转可比较时间对象的修复方案

核心问题

你当前代码的错误在于:

  • 误用time.strftime():该方法是把时间对象格式化为字符串,但你需要的是将读取到的日期字符串解析为时间对象,字符串直接比较会因字符顺序、格式差异导致逻辑失效。
  • 未处理非法时间值:读取到的日期存在87:05:23这种超出范围的小时值,直接解析会报错或导致比较逻辑异常。

修复步骤与代码示例

  1. 导入datetime模块,用于时间解析和比较
  2. 将当前时间转为datetime对象,而非字符串
  3. 预处理非法小时值,再将日期字符串解析为datetime对象
  4. 直接用datetime对象进行时间先后比较

修正后的代码:

#13. 点击"Start Recovery"按钮开始恢复
import datetime
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

try:
    logger.info("Step 13 Started: Start the recovery by pressing the 'Start Recovery' button.")
    # 获取当前时间的datetime对象,用于时间比较
    current_time = datetime.datetime.now()
    WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH, '//span[contains(text(), "Start recovery")]'))).click()

    backup1_id = ''
    backup2_id = ''    
    tableRows = WebDriverWait(browser, 10).until(EC.visibility_of_all_elements_located((By.XPATH, '//table[@id="cdk-drop-list-10"]//tbody//following::tr')))
    for row in tableRows:
        backup_time_str = row.find_element(By.CSS_SELECTOR, 'td.cdk-column-startTime').text
        # 处理非法小时值(示例:将超过24的小时取模24,可根据业务调整)
        try:
            date_part, time_part, period = backup_time_str.rsplit(' ', 2)
            h, m, s = time_part.split(':')
            fixed_h = int(h) % 24
            fixed_time_str = f"{date_part} {fixed_h:02d}:{m}:{s} {period}"
        except (ValueError, IndexError):
            # 格式异常则跳过当前行
            continue
        
        # 将处理后的字符串解析为datetime对象
        try:
            backup_time = datetime.datetime.strptime(fixed_time_str, "%b %d, %Y %I:%M:%S %p")
        except ValueError:
            continue
        
        # 用datetime对象直接比较时间先后
        if backup_time <= current_time:
            if not backup1_id:
                backup1_id = row.find_element(By.CSS_SELECTOR, 'td.cdk-column-id').text
                continue
            if backup1_id and not backup2_id:
                backup2_id = row.find_element(By.CSS_SELECTOR, 'td.cdk-column-id').text
                break

关键说明

  • 时间对象比较:datetime对象支持直接用<=、>=等运算符比较时间先后,比字符串比较更可靠,不会受字符顺序影响。
  • 非法值处理:针对表格中出现的87:05:23这类非法小时,示例中用取模24的方式修正,你也可以根据实际需求改为跳过该行或抛出异常。
  • 格式匹配:strptime的格式字符串%b %d, %Y %I:%M:%S %p必须和处理后的日期字符串完全匹配,否则会解析失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 00:47:45