У меня есть код для веб-скрапинга. Он работает довольно хорошо, но после некоторых операций я не могу понять, как действовать дальше, так как нет уникальных параметров для подключения команд 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) мне нужно нажать кнопку:
Если я выберу другой язык на веб-странице, например, немецкий, то текст «Новое решение» будет «Neue Entscheidung». Конечно, один из вариантов — перечислить все возможные варианты (их будет 3), но мне было интересно, есть ли какое-то общее решение, чтобы щелкнуть его в каждой языковой версии. Я был бы рад поделиться исходным кодом, чтобы упростить его, но слишком много личной информации.
Но, боюсь, обмен изображениями не очень полезен. Можете ли вы запутать личную информацию? Я собираюсь опубликовать краткосрочный ответ, над которым мы можем работать. Кроме того, меняет ли этот язык другие части проблемы? Например, значения атрибута для последней кнопки (часть 3 вашего вопроса)?
Я понимаю, что изображение не очень помогает... value = "Order"
меняется в зависимости от языковых настроек
Те же решения, что и для вашей проблемы 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 из вашего ответа. Также помогло ваше решение с двойными кавычками. Мастеру еще раз спасибо!
Что вы имеете в виду Текст «Новое решение» меняется в пределах языка страницы ? Кроме того, используйте инструмент фрагмента через редактировать, чтобы вставлять html, а не публиковать изображения, чтобы мы могли использовать их для тестирования,