如何使用具有相同ID但不同的onclick元素的VBA单击IE上的第二个按钮

问题描述 投票:1回答:2

我尝试单击IE中具有相同ID,相同类但不同onclick的按钮。我的代码使用第一个按钮,但无法单击第二个按钮。 Onclick元素将调用函数RaiseGdcP1(ItemLineNo)

我已经尝试使用IHTMLElement循环我的代码来搜索Id btnGdcP1and点击所有id但失败了。

这里我用来点击第一个按钮的代码

Set HTMLDoc = IE.document
HTMLDoc.parentWindow.execScript "window.confirm = function(){return true;};"
HTMLDoc.getElementById("btnGdcP1").Click
Application.Wait Now + TimeValue("00:00:10")

Html如下

<INPUT onclick=RaiseGdcP1(2) id=btnGdcP1 type=button value="GDC P1" name=btnGdcP1> "1st button
<INPUT onclick=RaiseGdcP1(3) id=btnGdcP1 type=button value="GDC P1" name=btnGdcP1> "2nd button

即使在我的excel中,每个按钮也有2行。我上面的代码只能单击第一个按钮。 我想点击这两个按钮。你能帮忙吗?

谢谢。

javascript html excel vba web-scraping
2个回答
0
投票

您可以使用attribute = value选择器进行区分

ie.document.querySelector("[onclick='RaiseGdcP1(2)']").click

您可能需要转义(),例如

ie.document.querySelector("[onclick='RaiseGdcP1\(2\)']").click

但我不这么认为。我认为逃避是因为没有引用,例如

ie.document.querySelector("[onclick=RaiseGdcP1\(2\)]").click

对于另一个

ie.document.querySelector("[onclick='RaiseGdcP1(3)']").click

您还可以将querySelectorAll()与#id选择器一起使用

Dim buttons As Object
Set buttons = ie.document.querySelectorAll("#btnGdcP1")
buttons.item(0).click '< first
buttons.item(1).click '< second

您也可以直接调用函数

ie.document.parentWindow.execScript "RaiseGdcP1(1)"
ie.document.parentWindow.execScript "RaiseGdcP1(3)"

0
投票

如果两个id具有相同的值,则会出错。为了按预期工作,它必须是唯一的:https://www.w3schools.com/hTml/html_id.asp

将第二个id更改为唯一值(btnGdcP2)并在代码中使用它:

HTMLDoc.getElementById("btnGdcP1").Click
HTMLDoc.getElementById("btnGdcP2").Click
© www.soinside.com 2019 - 2024. All rights reserved.