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

使用RSelenium在TripAdvisor上传入日期并获取价格列表的问题

解决RSelenium在TripAdvisor上的日期输入问题

我之前也踩过TripAdvisor日期选择器的坑——它的日历控件不是普通的可输入框,直接用sendKeysToElement基本没用,得换两种思路来解决:

方法一:直接操作隐藏的日期输入框(推荐)

很多网站的可视化日历背后,其实有个隐藏的type="date"的input元素,我们可以通过JS直接给它赋值,比模拟点击日历高效多了:

# 你已有的代码
chrome$navigate("https://www.tripadvisor.in/")
a <- chrome$findElement(using = 'css selector', ".typeahead_input")
a$sendKeysToElement(list("Bangalore"))
chrome$findElement(using = 'css selector', ".submit_text")$clickElement()

# 等待页面加载完成(必要,不然找不到元素)
Sys.sleep(3)

# 定位入住日期的隐藏input,用JS设置值
check_in_input <- chrome$findElement(using = 'css selector', "input[type='date'][name='checkin']")
chrome$executeScript("arguments[0].value = '2024-10-01';", list(check_in_input))

# 同理设置退房日期
check_out_input <- chrome$findElement(using = 'css selector', "input[type='date'][name='checkout']")
chrome$executeScript("arguments[0].value = '2024-10-07';", list(check_out_input))

方法二:模拟点击日历控件(兼容无隐藏input的情况)

如果隐藏input找不到,就只能模拟人工点击日历的流程:

# 你已有的代码
chrome$navigate("https://www.tripadvisor.in/")
a <- chrome$findElement(using = 'css selector', ".typeahead_input")
a$sendKeysToElement(list("Bangalore"))
chrome$findElement(using = 'css selector', ".submit_text")$clickElement()

Sys.sleep(3)

# 1. 打开入住日期日历
check_in_trigger <- chrome$findElement(using = 'css selector', ".ui_picker_arrow_target[data-date-type='checkin']")
check_in_trigger$clickElement()

Sys.sleep(1)

# 2. 切换到目标月份(比如2024年10月)
next_month_btn <- chrome$findElement(using = 'css selector', ".ui_calendar_next")
while(TRUE) {
  current_month <- chrome$findElement(using = 'css selector', ".ui_calendar_month")$getElementText()[[1]]
  if(grepl("October 2024", current_month)) {
    break
  }
  next_month_btn$clickElement()
  Sys.sleep(0.5)
}

# 3. 选择入住日期(1号)
check_in_date <- chrome$findElement(using = 'css selector', ".ui_calendar_day[data-day='1']")
check_in_date$clickElement()

Sys.sleep(1)

# 4. 打开退房日期日历并选择7号
check_out_trigger <- chrome$findElement(using = 'css selector', ".ui_picker_arrow_target[data-date-type='checkout']")
check_out_trigger$clickElement()

check_out_date <- chrome$findElement(using = 'css selector', ".ui_calendar_day[data-day='7']")
check_out_date$clickElement()

注意事项

  • TripAdvisor的元素class可能会不定期更新,要是代码报错,先打开Chrome开发者工具(F12)重新定位元素的选择器。
  • 一定要加Sys.sleep()等待页面加载,不然元素还没渲染出来就执行操作,会报找不到元素的错误。
  • 如果用无头模式运行,记得设置窗口大小:chrome$setWindowSize(width = 1280, height = 720),避免部分元素被隐藏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:09:35