如何单击具有日期格式的文本框并使用 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
我正在使用 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