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

如何使用Selenium操作Mercurytravels.co.in网站的日期选择器

Selenium操作Mercury Travels航班日期选择器实现方案

以下两种方案都可以实现传入DD/MM/YYYY格式日期,自动选中对应出发日期的需求,包括未来月份的日期:


方案1:JS直接赋值(推荐,逻辑最简单)

该网站的日期输入框默认添加了只读属性,无需模拟点击日期选择器,直接通过JS修改输入框值即可完成日期选择,适配任意合法日期:

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.mercurytravels.co.in/flights")
# 替换为你需要的DD/MM/YYYY格式日期
target_date = "25/12/2024"

# 定位出发日期输入框
journey_input = driver.find_element(By.ID, "departdate")

# 执行JS操作:移除只读属性→赋值→触发页面识别事件
driver.execute_script("""
    arguments[0].removeAttribute('readonly');
    arguments[0].value = arguments[1];
    arguments[0].dispatchEvent(new Event('input'));
    arguments[0].dispatchEvent(new Event('change'));
""", journey_input, target_date)
  • 优势:无需处理月份切换、日期定位逻辑,执行效率最高,不会因为页面样式调整导致元素定位失败。

方案2:模拟用户点击操作(适用于JS赋值不生效的场景)

如果业务要求必须模拟真实用户操作路径,可以按以下逻辑实现:

  1. 解析传入的DD/MM/YYYY格式日期,拆分出目标日、月、年
  2. 点击输入框唤起日期选择器
  3. 循环点击下一月按钮,直到选择器顶部显示的年月和目标年月匹配
  4. 点击对应日期完成选择

代码示例:

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
from datetime import datetime

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
driver.get("https://www.mercurytravels.co.in/flights")

# 目标日期,可自定义
target_date_str = "25/12/2024"
target_date = datetime.strptime(target_date_str, "%d/%m/%Y")
target_day = target_date.day
target_month = target_date.month
target_year = target_date.year

# 唤起日期选择器
wait.until(EC.element_to_be_clickable((By.ID, "departdate"))).click()

# 切换到目标年月
while True:
    current_month_year = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".ui-datepicker-title"))).text
    current_date = datetime.strptime(current_month_year, "%B %Y")
    if current_date.year == target_year and current_date.month == target_month:
        break
    # 点击下一月按钮
    wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".ui-datepicker-next"))).click()

# 选中目标日期
wait.until(EC.element_to_be_clickable((By.XPATH, f"//a[@class='ui-state-default' and text()='{target_day}']"))).click()
  • 注意:如果需要选择过去的日期,将切换按钮的定位符替换为.ui-datepicker-prev即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:24:03