使用Selenium Basic读取Excel数据并选中网页datetimepicker对应日期
实现方案
你已经完成了打开日期选择面板的操作,只需在原有代码基础上追加定位并点击目标日期的逻辑即可实现需求,核心修改代码如下:
' 原有代码保持不变 Set c = x.FindElementsByClass("datetimepicker-days")(1) Debug.Print c.Text ' ---------------新增逻辑开始--------------- ' 读取A1单元格的目标日期 Dim targetDay As String targetDay = Trim(CStr(ThisWorkbook.Sheets("替换为你实际的工作表名").Range("A1").Value)) ' 定位当前月份的目标日期,排除上下月的旧/新日期 Dim dayElement As Selenium.WebElement Set dayElement = c.FindElementByXPath(".//td[contains(@class, 'day') and not(contains(@class, 'old')) and not(contains(@class, 'new')) and normalize-space(text())='" & targetDay & "']") ' 点击选中日期 dayElement.Click x.Wait 1000 ' ---------------新增逻辑结束---------------
可选优化方案
如果不需要模拟用户点击交互,也可以直接修改输入框的值,同时触发控件事件避免提交不生效,该方案效率更高:
' 按需修改目标年月日时分,格式和控件要求的dd.MM.yyyy HH:mm保持一致即可 Dim targetDate As String targetDate = Format(DateSerial(2021, 11, CInt(Range("A1").Value)) + TimeSerial(8, 55, 0), "dd.MM.yyyy HH:mm") x.ExecuteScript "const input = document.getElementById('txtFaaliyetTarihBaslangic'); input.value = '" & targetDate & "'; input.dispatchEvent(new Event('change'));"
注意事项
- 替换代码内的工作表名称为你实际存放A1单元格的工作表名
- 如果目标日期不在当前打开的日历月份内,需要先点击
datetimepicker-days容器内的.prev或.next类按钮切换到目标月份,再执行选择逻辑 - 选中日期后如果需要继续选择时分,可以用相同逻辑定位
.hour和.minute类的元素点击
内容的提问来源于stack exchange,提问作者M. Suphi Deniz
相关产品推荐
相关产品推荐

