Как нажать вторую кнопку в IE с VBA, которые имеют тот же идентификатор, но другой элемент onclick - PullRequest
1 голос
/ 07 апреля 2019

Я пытаюсь нажать кнопку в IE, которая имеет тот же идентификатор, тот же класс, но другой щелчок. Мой код работает с 1-й кнопкой, но не может нажимать 2-ю кнопку.
Элемент Onclick вызовет функцию RaiseGdcP1(ItemLineNo).

Я уже пытаюсь использовать IHTMLElement, чтобы зациклить свой код для поиска Id btnGdcP1 и щелкнуть по всем этим идентификаторам, но не удалось.

Здесь код, который я использую, чтобы нажать 1-ую кнопку

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 строки для каждой кнопки. Мой код выше может нажать только 1-ую кнопку.
Я хотел бы нажать обе кнопки. Можете ли вы мне помочь в этом.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 07 апреля 2019

Вы можете использовать атрибуты = значения селекторов для дифференциации

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 голосов
/ 07 апреля 2019

Ошибочно иметь два идентификатора с одинаковым значением. Он должен быть уникальным, чтобы работать как положено: https://www.w3schools.com/hTml/html_id.asp

Измените второй идентификатор на уникальное значение (btnGdcP2) и используйте его в своем коде:

HTMLDoc.getElementById("btnGdcP1").Click
HTMLDoc.getElementById("btnGdcP2").Click
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...