excel - 单击复选框仅适用于第一个实例 VBA Selenium(元素单击被拦截)
问题描述
两个小时以来,我试图解决检查由 JavaScript 加载的网页上的复选框的问题。这是所需页面的 html 页面 https://pastebin.com/Q1q28dR8
这是我到目前为止的代码
Private driver As New Selenium.ChromeDriver
Const sURL As String = "https://eservices.moj.gov.kw/"
Sub Test()
With driver
.Start "Chrome", sURL
.Get sURL
'#https://eservices.moj.gov.kw/#
'//*[@id="loginDiv"]/div/a[1]
.Wait 2000
''.FindElementByXPath("//*[@id='loginDiv']/div/a[1]").Click
.FindElementByClass("headerTabLeft").Click
.Wait 3000
.FindElementById("txtUserID").SendKeys "username"
.FindElementById("txtPWD").SendKeys "password"
.FindElementById("txtCaptcha").Click
.Wait 5000
.FindElementByXPath("//*[@id='frmLogin']/input[3]").Click
.Get sURL & "lawyerViews/lawOrders/"
.FindElementByLinkText("أوامر أداء جاهزة للدفع").Click
Dim dRows As Object
Set dRows = .FindElementsByCss("table.table-striped tbody tr")
'Debug.Print dRows.Count
.FindElementById("checkAll").Click
.Wait 3000
.FindElementById("checkAll").Click
.Wait 3000
Dim r As Long
For r = 1 To dRows.Count
Dim sRequestID As String
sRequestID = dRows.Item(r).FindElementsByTag("td")(2).Text
Dim x
x = Application.Match(Val(sRequestID), ActiveSheet.Columns(1), 0)
If Not IsError(x) Then
backP:
.Wait 2000
On Error Resume Next
On Error GoTo backP
.FindElementByXPath("//*[@id=""toBePaid[" & r - 1 & "]""]").Click
.Wait 2000
'.FindElementByXPath("//input[@type='checkbox'][@value='200512308']").Click
'.FindElementById("toBePaid[" & r - 1 & "]").WaitSelection True, 20000
'.Wait 2000
'.FindElementByCss("[type=checkbox][value='" & sRequestID & "']").Click
'.FindElementById("toBePaid[" & r - 1 & "]").Click
On Error GoTo 0
Debug.Print sRequestID & " Checked"
End If
Next r
Stop
End With
End Sub
第一个复选框只被选中,然后我收到一条错误消息,说“元素点击被拦截”我尝试使用 id、xpath、css 并且没有任何想法?
解决方案
虽然对于自动化来说并不理想,但似乎一种解决方法,通过聊天中的工作,是通过 javascript 执行点击并确保使用属性,而不是 id,css 选择器
.ExecuteScript "document.querySelector(""[id='toBePaid[" & r - 1 & "]']"").click();"
推荐阅读
- javascript - 防止使用 svg 进行亚像素渲染
- c++ - 如何在我的向量实现中编写 operator=(带有移动语义)和 shrink_to_fit 函数?
- json - 如何从量角器中的 JSON 对象中提取字符串
- typo3 - 单击项目隐藏图标不刷新屏幕
- reporting-services - 根据 SSRS 中的记录数调整表大小
- jhipster - jhipster 中 java 服务部署的上下文路径
- java - 在Java Spring 4中从应用程序A到应用程序B进行rest或soap api调用时将用户名存储在数据库中
- testing - 这个异常是什么意思?
- pandas - 如何使用共享字典在一个循环中重命名多个数据帧?
- augmented-reality - 如何将指示器或指针锚定到 Sceneform?