调试模式和运行模式在selenium VBA(Excel)上的行为不同



我已经搜索了一段时间,但找不到解决方案。也可以在这个页面上找到类似的链接,它由于复制而被锁定,但实际上它并没有复制任何内容。这不是Java或#c或任何其他提到的语言。这是vba和selenium代码。在下面的链接中,调试模式(F8(一切都很顺利,但在运行模式(F5(中,它没有填充datefrom和dateto部分或部分填充。

你知道吗?网站也是一个企业网站,所以很遗憾我不能分享它。

Option Explicit
Sub Download_Report4()
Dim obj As New Selenium.WebDriver
Dim ele As WebElement
obj.Start "Chrome"
obj.Get "https://test.com"
Dim Username, Password As Range
Set Username = ActiveWorkbook.Sheets("LoginData").Range("B1")
Set Password = ActiveWorkbook.Sheets("LoginData").Range("B2")
obj.FindElementById("UserName").SendKeys Username.Text
obj.FindElementById("Password").SendKeys Password.Text
obj.FindElementById(LoginButton").Click
Application.Wait Now + TimeValue("00:00:02")
Dim Rows, x
For x = 2 To Sheet1.UsedRange.Rows.count Step 1
If IsEmpty(Sheet1.Range("A" & x)) Then
Exit For
Else
obj.FindElementByName("date$From").Clear
obj.FindElementByName("date$To").Clear

obj.FindElementByName("date$From").SendKeys ("01,03,2017")
obj.FindElementByName("date$To").Click
obj.FindElementByName("date$To").SendKeys (Sheet1.Range("B" & x))
obj.FindElementById("btnSearch").Click
obj.FindElementById("btndownload").Click
End If
Next

End Sub

顺便说一下,日期格式是正确的。当它被输入为01/03/2017铬添加日期奇数。到今年为止的月份部分是正确的,没有添加到月份部分。

我会提供更多的细节。在下面的代码中,InternetExplorer运行得很好,除非在下载按钮点击后,ie 11提示"你想打开还是保存"问题停止了我的宏并循环结束。这就是我移动宏硒的原因。

Public Sub Download_Report()
Dim ie As New InternetExplorer
Dim myElem As Variant
ie.Visible = True
ie.navigate "https://test.com"
ie.document.getElementById("UserName").Focus
ie.document.getElementById("LUserName").Value = Sheets("LoginData").Range("B1").Text
ie.document.getElementById("Password").Focus
ie.document.getElementById("Password").Value = Sheets("LoginData").Range("B2").Text
ie.document.getElementById("LoginButton").Click
End If
Dim Rows, x
For x = 2 To Sheet1.UsedRange.Rows.count Step 1
If IsEmpty(Sheet1.Range("A" & x)) Then
Exit For
Else
While .Busy Or .readyState < 4: DoEvents: Wend
ie.document.getElementsByName("date$From")(0).Value = Sheet1.Range("A" & x).Text
While .Busy Or .readyState < 4: DoEvents: Wend
ie.document.getElementsByName("date$To")(0).Value = Sheet1.Range("B" & x).Text
While .Busy Or .readyState < 4: DoEvents: Wend
ie.document.getElementById("btnSearch").Click
While .Busy Or .readyState < 4: DoEvents: Wend
ie.document.getElementById("btndownload").Click
End If
Next
End With
End Sub

日期可以在点击后用作选择器,也可以作为文本填写,网站上的日期部分代码如下。截止日期也与相同。网站代码(网站位于防火墙后面(

<input name="date$From" type="text" value="18/02/2020" size="6" id="date_tbFrom" class="searchSelect">
<input type="hidden" name="date_From_Client" id="date_From_Client">

是的,有一个问题(我不知道为什么,但(,当.click命令应用于日期部分时,cursoir被选择在部分的一半或结尾,所以宏输入的日期是错误的,或者部分无法填充,这意味着空。然而,在调试mod时,一切都很顺利。比我找到另一个解决方案。我找到了日期前一页的部分。然后添加

obj.FindElementByName("date$From").Clear
obj.FindElementByName("date$To").Clear
obj.findelementsbyid("sectionbeforedatefrom").click
obj.sendkeys(keys.Tab)
obj.FindElementByName("date$From").SendKeys ("01,03,2017")
obj.findelementsbyid("sectionbeforedateto").click
obj.sendkeys(keys.Tab)
obj.FindElementByName("date$To").SendKeys (Sheet1.Range("B" & x))
obj.FindElementById("btnSearch").Click

这些步骤对我很有效。但@TimWilliams是对的,所有的事情都与时间有关。谢谢大家。

相关内容

  • 没有找到相关文章