首页 > 解决方案 > 单击复选框仅适用于第一个实例 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 并且没有任何想法?

标签: excelvbaselenium

解决方案


虽然对于自动化来说并不理想,但似乎一种解决方法,通过聊天中的工作,是通过 javascript 执行点击并确保使用属性,而不是 id,css 选择器

.ExecuteScript "document.querySelector(""[id='toBePaid[" & r - 1 & "]']"").click();"

推荐阅读