Selenium Python:如何将日期字符串转为可比较的日期变量?
日期字符串转可比较时间对象的修复方案
核心问题
你当前代码的错误在于:
- 误用
time.strftime():该方法是把时间对象格式化为字符串,但你需要的是将读取到的日期字符串解析为时间对象,字符串直接比较会因字符顺序、格式差异导致逻辑失效。 - 未处理非法时间值:读取到的日期存在
87:05:23这种超出范围的小时值,直接解析会报错或导致比较逻辑异常。
修复步骤与代码示例
- 导入
datetime模块,用于时间解析和比较 - 将当前时间转为
datetime对象,而非字符串 - 预处理非法小时值,再将日期字符串解析为
datetime对象 - 直接用
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
相关产品推荐
相关产品推荐

