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

使用RSelenium爬取票价时如何操作Flatpickr日历选择日期时间

可以直接向该Flatpickr日期控件传值,不需要模拟逐一点击日历元素,优先推荐使用执行JS修改输入框值的方案,两种实现方式如下:

方案1:直接修改输入框值(最优,无需操作弹窗)

Flatpickr组件默认绑定了对应的输入框,大部分场景下输入框被设置了只读属性,无法直接用sendKeysToElement传值,用JS修改属性和值即可:

# 定位日期输入框
date_input <- remDr$findElement(using = "id", value = "js-auskunft-datum-value")
# 执行JS:移除只读属性、赋值、触发change事件让组件识别值变更
remDr$executeScript("
  arguments[0].removeAttribute('readonly');
  arguments[0].value = arguments[1];
  arguments[0].dispatchEvent(new Event('change'));
", list(date_input, day))

# 用同样逻辑处理时间输入
time_input <- remDr$findElement(using = "id", value = "js-auskunft-time-value")
remDr$executeScript("
  arguments[0].removeAttribute('readonly');
  arguments[0].value = arguments[1];
  arguments[0].dispatchEvent(new Event('change'));
", list(time_input, time))

该方案不受页面语言、日历弹窗加载状态影响,运行效率最高。

方案2:模拟点击日历元素

如果需要完全模拟用户操作,可以点击触发日历弹窗后定位对应日期元素点击:

# 点击日期输入框触发日历弹窗
date_input$clickElement()
Sys.sleep(2) # 等待弹窗加载完成

# 转换日期格式为aria-label对应的格式(如果是德语界面需修改为德语月份格式)
target_date_label <- format(as.Date(day, "%d.%m.%Y"), "%B %d, %Y")
# 定位目标日期元素并点击
target_day_elem <- remDr$findElement(using = "xpath", value = sprintf("//span[contains(@class, 'flatpickr-day') and @aria-label='%s']", target_date_label))
target_day_elem$clickElement()

注意:如果站点是德语界面,日历的aria-label会使用德语月份名称,该方案需要额外做月份名称的本地化适配,不如方案1通用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:15:01