Кнопки и поля веб-скрейпинга с одинаковым именем типа

У меня есть код для веб-скрапинга. Он работает довольно хорошо, но после некоторых операций я не могу понять, как действовать дальше, так как нет уникальных параметров для подключения команд 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) После того, как верхний код готов, мне нужно нажать эту кнопку:

Кнопки и поля веб-скрейпинга с одинаковым именем типа

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

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

Кнопки и поля веб-скрейпинга с одинаковым именем типа

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

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

Кнопки и поля веб-скрейпинга с одинаковым именем типа

Что вы имеете в виду Текст «Новое решение» меняется в пределах языка страницы ? Кроме того, используйте инструмент фрагмента через редактировать, чтобы вставлять html, а не публиковать изображения, чтобы мы могли использовать их для тестирования,

QHarr 28.05.2019 13:13

Если я выберу другой язык на веб-странице, например, немецкий, то текст «Новое решение» будет «Neue Entscheidung». Конечно, один из вариантов — перечислить все возможные варианты (их будет 3), но мне было интересно, есть ли какое-то общее решение, чтобы щелкнуть его в каждой языковой версии. Я был бы рад поделиться исходным кодом, чтобы упростить его, но слишком много личной информации.

hatman 28.05.2019 13:45

Но, боюсь, обмен изображениями не очень полезен. Можете ли вы запутать личную информацию? Я собираюсь опубликовать краткосрочный ответ, над которым мы можем работать. Кроме того, меняет ли этот язык другие части проблемы? Например, значения атрибута для последней кнопки (часть 3 вашего вопроса)?

QHarr 28.05.2019 13:47

Я понимаю, что изображение не очень помогает... value = "Order" меняется в зависимости от языковых настроек

hatman 28.05.2019 13:51

Те же решения, что и для вашей проблемы 1

QHarr 28.05.2019 13:51
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
5
168
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Предостережение:

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


Проблема 1)

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

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

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) Передайте список с синтаксисом Or языковых вариантов

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 возвращает все совпадения.

Я понял, как глубоко погрузиться, начиная с div из вашего ответа. Также помогло ваше решение с двойными кавычками. Мастеру еще раз спасибо!

hatman 28.05.2019 14:16

Другие вопросы по теме