Arhn - архитектура программирования

Собрать значения с веб-сайта с помощью VBA

Требуется помощь, чтобы очистить некоторые данные с веб-сайта. В качестве первого шага мне удается посетить веб-сайт и импортировать свои переменные, но:

1. я не знаю, как нажать кнопку «Конвертировать валюты» 2. а затем, чтобы получить «Сумма конвертации» и «Курс», чтобы преуспеть.

любая помощь будет оценена!!!

Sub Test()

Dim IE As InternetExplorer

Dim Amount As String
Dim Source As String
Dim Target As String
Dim Datestring As String

Amount = 10000
Source = "Euro"
Target = "UK pound sterling"
Datestring = "03-08-2018"

'Open Browser and download data
Set IE = New InternetExplorer

With IE
    .Visible = True
    .Navigate "http://sdw.ecb.europa.eu/curConverter.do?sourceAmount=" & _
            Amount & _
            "&sourceCurrency=" & _
            Source & _
            "&targetCurrency=" & _
            Target & _
            "&inputDate=" & _
            Datestring & _
            "&submitConvert.x=209&submitConvert.y=10"

            submitConvert.Click

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

End With

Конец сабвуфера

06.08.2018

  • @QHarr есть идеи? 06.08.2018

Ответы:


1

XmlHttpRequest (XHR):

Быстрее использовать XHR там, где нет открытия браузера.

Option Explicit

Public Sub GetRates()
    Dim sResponse As String, i As Long, html As New HTMLDocument, clipboard As Object
    Dim sourceAmount As String, sourceCurrency As String, targetCurrency As String, inputDate As String
    sourceAmount = "10000"
    sourceCurrency = "EUR"
    targetCurrency = "GBP"
    inputDate = "03-08-2018"
    Dim url As String
    url = "http://sdw.ecb.europa.eu//curConverter.do?sourceAmount=" & sourceAmount & "&sourceCurrency=" & sourceCurrency & _
        "&targetCurrency=" & targetCurrency & "&inputDate=" & inputDate & "&submitConvert.x=52&submitConvert.y=8"

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", url, False
        .send
        sResponse = StrConv(.responseBody, vbUnicode)
    End With

    sResponse = Mid$(sResponse, InStr(1, sResponse, "<!DOCTYPE "))
    With html
       .body.innerHTML = sResponse
        Set clipboard = New MSForms.DataObject
        clipboard.SetText .querySelectorAll("table.tableopenpage").item(1).outerHTML
        clipboard.PutInClipboard
        ActiveSheet.Cells(1, 1).PasteSpecial
    End With
End Sub

Менее надежный, но если вы просто хотите

Количество конверсий:

.querySelectorAll("table.tableopenpage").item(1).getElementsbytagname("td")(7).innertext

И скорость:

.querySelectorAll("table.tableopenpage").item(1).getElementsbytagname("td")(10).innertext

Вывод:

выход


Ссылки:

Microsoft Forms Object Library (or add a userform to your project)
Microsoft HTML Object Library

Internet Explorer:

Данные уже есть из-за строки запроса, которую вы используете в URL-адресе. Нет необходимости в щелчке.

Просто используйте правильные сокращения для валют.

Option Explicit
Public Sub Test()
    Dim IE As InternetExplorer, Amount As String, Source As String, Target As String
    Dim Datestring As String, hTable As HTMLTable

    Amount = 10000
    Source = "EUR"
    Target = "GBP"
    Datestring = "03-08-2018"
    Dim url As String
    url = "http://sdw.ecb.europa.eu/curConverter.do?sourceAmount=" & _
          Amount & _
          "&sourceCurrency=" & _
          Source & _
          "&targetCurrency=" & _
          Target & _
          "&inputDate=" & _
          Datestring & _
          "&submitConvert.x=209&submitConvert.y=10"

    Set IE = New InternetExplorer

    With IE
        .Visible = True
        .navigate url

        While .Busy Or .readyState < 4: DoEvents: Wend
        Dim clipboard As Object
        Set clipboard = New MSForms.DataObject
        clipboard.SetText .document.getElementsByClassName("tableopenpage")(1).outerHTML
        clipboard.PutInClipboard
        ActiveSheet.Cells(1, 1).PasteSpecial
    End With
End Sub

Если вас интересует, как нажимать:

1) Используйте правильные трехбуквенные сокращения для валют.

2) Вы можете нажать кнопку отправки с помощью:

.document.querySelector("input[name=submitConvert]").Click

Он использует селектор CSS

input[name=submitConvert]

Это говорит

элемент с тегом input, имеющим атрибут name, значение которого равно submitconvert.

3) Затем вам понадобится

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

разрешить обновление страницы.

4) Затем вы можете получить таблицу результатов с помощью:

.document.querySelectorAll("table.tableopenpage").item(1)

Это собирает все элементы с тегом table и классом tableopenpage. Вам нужен второй из них, который равен 1 в системе индексов на основе 0.


Необходимые ссылки:

Microsoft Internet Controls
Microsoft HTML Object Library
Microsoft Forms Object Library

Другое:

Я считаю, что проще получить таблицу за один раз, но вы можете настроить скорость, например, более конкретно с помощью селектора CSS:

a[target*=quickview]

Имейте в виду, что Excel может поменять дату с dd/mm/yyyy на mm/dd/yyyy при выводе, поэтому вам нужно будет исправить это или, по крайней мере, знать об этом.

06.08.2018
  • большое спасибо за ваш быстрый повтор. есть ли способ вместо вставки всех этих данных получить только эти два значения: 1. 8905,00 фунтов стерлингов 2. 1 евро = 0,8905 фунтов стерлингов 07.08.2018
  • я пытаюсь использовать ваши обновления для метода Internet Explorer, и я получаю сообщение об ошибке с интерфейсом. 07.08.2018
  • Почему бы не использовать другой метод? И какое точное сообщение об ошибке для Internet Explorer? И решается ли это с помощью Dim IE As InternetExplorerMedium? 07.08.2018
  • мне удалось найти решение! @QHarr вы спасли мою спину в другой раз! Большое спасибо за вашу помощь. 07.08.2018
  • Я очищаю значения и использую их в качестве подписи к пользовательской форме конвертера валют: document.getElementsByClassName(tableopenpage).Item(1).getElementsByTagName(td)(10).innerText 07.08.2018
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..