如何单击具有日期格式的文本框并使用 selenium 和 VBA 输入值?

How to click on a textbox with date format and type in value using selenium with VBA?

我正在使用 Selenium basic 编写 Excel 宏。我有一个文本框,用于从工作表单元格值中输入日期。问题是,当我尝试输入日期值时,光标的位置从中间开始,即月份值,我需要光标从文本框的最左边开始。

我试过不使用“driver.FindElementById().Click”,但它根本没有输入任何值。 但是使用“driver.FindElementById().Click”会发生这种情况,请参考下图。 enter image description here

万一图片上传不了... _ _ _ _/| / _ 输出错误 20/22 输出应为 2022/01/18 (YYYY/MM/DD)

这是我的代码...

Sub MAIN_RTN()

Dim WK_GETDATE As Date
Dim WEBDRIVER As New Selenium.ChromeDriver
Dim IDX0 As Integer
Dim WK_DATE As String

    WEBDRIVER.AddArgument "disable-gpu"
    WEBDRIVER.AddArgument "start-maximized"
    With WEBDRIVER
        .Start
        .Get ThisWorkbook.Worksheets(1).Range("B5").Value
        .FindElementByName("txtID").SendKeys ThisWorkbook.Worksheets(1).Range("F2").Value
        .FindElementByName("txtPass").SendKeys ThisWorkbook.Worksheets(1).Range("F3").Value
    End With

    WK_DATE = ThisWorkbook.Worksheets(1).Range("F4").Value
    WK_DATE = Replace(WK_DATE, "/", "")
    WK_GETDATE = Mid(WK_DATE, 1, 4) & "/" & Mid(WK_DATE, 5, 2) & "/" & Mid(WK_DATE, 7, 2)
    
    For IDX0 = 11 To (ThisWorkbook.Worksheets(1).Range("B10") + 10)
        WEBDRIVER.FindElementById("cphContents_ddlMc").SendKeys ThisWorkbook.Worksheets(1).Range("B" & IDX0).Value
        WEBDRIVER.FindElementById("cphContents_txtDayF").Clear
        Call WaitFor(1)
        Call DATE_SET(WEBDRIVER, WK_GETDATE, "cphContents_txtDayF")
        WEBDRIVER.FindElementById("cphContents_txtDayT").Clear
        Call WaitFor(1)
        Call DATE_SET(WEBDRIVER, WK_GETDATE + 1, "cphContents_txtDayT")
        Call WaitFor(1)
        WEBDRIVER.FindElementById("cphContents_cmdExcel_Day").Click
        Call WaitFor(5)
    Next IDX0    
    WEBDRIVER.Quit
    Exit Function
End Sub

Sub DATE_SET(ByRef WEBDRIVER As Selenium.ChromeDriver, ARG_DATE As Date, WK_ELEMENT As String)

Dim IDX As Integer
Dim WKSTR1 As String
    WKSTR1 = Format(ARG_DATE, "YYYYMMDD")

    Call WaitFor(2)
    WEBDRIVER.FindElementById(WK_ELEMENT).Click

    Call WaitFor(2)
    For IDX = 1 To Len(WKSTR1)
        WEBDRIVER.FindElementById(WK_ELEMENT).SendKeys Mid(WKSTR1, IDX, 1)
    Next IDX
End Sub

您尝试过使用 WEBDRIVER.ExecuteScript 吗?

datescript = "arguments[0].setAttribute('value', 'yourdate')"
WK_ELEMENT = WEBDRIVER.FindElementById("cphContents_txtDayF")
WEBDRIVER.ExecuteScript datescript, WK_ELEMENT

我找到了解决方法。我强迫光标移动到文本框最左边。我为此安装了 SeleniumWrapper。

WEBDRIVER.FindElementById("cphContents_txtDayF").Click            
For x = 1 To 5                
WEBDRIVER.SendKeys keys.ArrowLeft            
Next x