VBA遍历JavaScript生成表中的复选框

时间:2019-01-16 19:07:12

标签: javascript excel vba internet-explorer web-scraping

我正在尝试检查JS生成的名为tblItems的表中的所有框

我尝试过getElementsByTagName(“ td”),但是它只是将所有内容作为HTML obj加载,并且我无法使用InStr来找到任何可以区分它们的东西。 这就是我试图用来查找可以用来选中复选框的值的方法。

Set AllChkBoxes = appIE.document.getElementById("tblItems").getElementsByTagName("td")
    For Each box In AllChkBoxes
        If InStr(UCase(box), "") <> 0 Then
            MsgBox (box)

        Else
            MsgBox (box)
            End If
    Next box
End Sub

这是我试图循环显示值但无法执行的复选框。还有很多其他的td标签名称,但它们只是表或hrefs

中的值
<td align="center"><input type="checkbox" name="chkToPay" checked="" value="0"></td>

<td align="center"><input type="checkbox" name="chkToPay" checked="" value="1"></td>

<td align="center"><input type="checkbox" name="chkToPay" checked="" value="2"></td>

<td align="center"><input type="checkbox" name="chkToPay" checked="" value="3"></td>

感谢任何能提供帮助的人。

2 个答案:

答案 0 :(得分:1)

可能在下面的代码帮助下,我正在使用jquery:

<table id="tableId">
<tr>
<td align="center"><input type="checkbox" name="chkToPay"  value="0"></td>

<td align="center"><input type="checkbox" name="chkToPay"  value="1"></td>

<td align="center"><input type="checkbox" name="chkToPay"  value="2"></td>

<td align="center"><input type="checkbox" name="chkToPay" value="3"></td>
</tr>


$(document).on("click", '#tableId tbody :checkbox[name="chkToPay"]', function(event) {
var currentRows = $('#tableId');

$.each(currentRows, function() {
        $(this).find(':checkbox[name=chkToPay]').each(function() {
            if($(this). prop("checked") == true){
                var parentTr = $(this).parents("tr");
                $(this).prop('checked', true);
        alert($(this).val());
        // if you need text from another td you can access by below line
                //alert(parentTr.children("td").eq(0).text());

            }
        });
    });
        });

答案 1 :(得分:1)

将有助于查看更多html。看起来您可以使用例如attribute = value选择器。在下文中,我定位名称属性和关联的值

Dim list As Object, i As Long
Set list = ie.document.querySelectorAll("[name=chkToPay]")
For i = 0 To list.Length - 1
    Debug.Print list.item(i).Value
Next

如果存在,您还可以将其与父ID组合

Dim list As Object, i As Long
Set list =  ie.document.querySelectorAll("#tableId [name=chkToPay]")
For i = 0 To list.Length - 1
    Debug.Print list.item(i).Value
Next

您还可以与其他属性结合使用以增强特异性。

Dim list As Object, i As Long
Set list =  ie.document.querySelectorAll("#tableId [type=checkbox][name=chkToPay]")
For i = 0 To list.Length - 1
    Debug.Print list.item(i).Value
Next

您明白了。

如果要检查特定的一项,请在value属性中添加

ie.document.querySelector("#tableId [name=chkToPay][value='1']").Click