Веб-кнопки и поля с одинаковым именем - PullRequest
1 голос
/ 28 мая 2019

У меня есть код для очистки веб-страниц.Он работает довольно хорошо, но после некоторых операций я не могу понять, как поступить, поскольку нет уникальных параметров для подключения команд VBA.

Вот мой текущий код:

Sub ChechAutomate()

    Dim ie As New InternetExplorer, url As String, ws As Worksheet

    Set ws = ThisWorkbook.Sheets("Other Data")

    url = "https://infra.com"

    With ie
        .Visible = True
        .Navigate2 url

        While .Busy Or .ReadyState < 4: DoEvents: Wend

        With .Document

        If .querySelectorAll("#login-bis-id-btn").Length > 0 Then

            .querySelector("[name=userName]").Value = "username"
            .querySelector("[name=password]").Value = "password"
            .querySelector("[type=submit]").Click

        Else

            Application.Wait (Now + TimeValue("00:00:01"))

            .querySelector("[id=companySearchKeyData]").Value = ws.Range("T24").Value
            .querySelector("[type=submit]").Click

            Application.Wait (Now + TimeValue("00:00:01"))

            .querySelector("[name=creditType] [value='17']").Selected = True

            Application.Wait (Now + TimeValue("00:00:01"))

            .querySelector("[id=legalForms] [value='EN']").Selected = True

        End If

        End With

    End With

End Sub

1) После того, как верхний код готов, мне нужно нажать эту кнопку:

enter image description here

Я пытался .querySelector("[name=#]").Click.Текст «Новое решение» меняется в зависимости от языка страницы.Также есть другие кнопки type="button".

2) После того, как (1) сделано, мне нужно ввести значение в это поле:

enter image description here

Я пытался использовать .querySelector("[name=questions[0].answer]").Value = "1000", это выдает ошибку.

3) После (1) и (2) мне нужно нажать кнопку:

enter image description here

1 Ответ

1 голос
/ 28 мая 2019

Оговорка:

Нам действительно нужно увидеть больше html. Не видя весь html (обфусцирующую личную информацию) с такими проблемами, как 1 и 3, я могу дать только общие подходы к рассмотрению.


Задача 1)

На данный момент у вас есть как минимум три других варианта:

1) захватить коллекцию / список узлов и индексировать, чтобы получить правильную кнопку / цикл всех элементов проверка уникальности innerText / атрибута, если доступно

Set col = ie.document.getElementsByTagName("input")  'collection. For Each over
Set nodeList = ie.document.querySelectorAll("input") 'nodelist. For i = 0 to nodeList.Length -1

Индексация:

col(0)  'example index
nodeList.item(0)  'example index

2) Найдите связь между этим элементом и другим, который захватывает этот элемент. Или некоторая комбинация атрибутов для идентификации. См. Ответ здесь для получения дополнительной информации.

Например, возможно добавление родительского класса div

ie.document.querySelector("div.content [type=button]")

3) Передать список с синтаксисом Или вариантов языка

ie.document.querySelector("[value='New decision'], [value='Neue Entscheidung'],[value='Other language variant']")

Задача 2)

Вам нужно использовать одинарные кавычки внутри двойных кавычек

ie.document.querySelector("[name='questions[0].answer']").value = 1000

Задача 3)

По задаче 1.


Примечания:

Помните, querySelector возвращает первое совпадение для шаблона, querySelectorAll возвращает все совпадения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...