VBA скрипт для навигации по веб-странице и загрузки CSV - PullRequest
0 голосов
/ 18 февраля 2019

Мне нужна помощь в разработке сценария VBA для работы в Excel.

На этом сайте можно загрузить файлы CSV для каждого фонда.Скрипт VBA, который мне нужен, будет:

  • Перейдите по указанному выше URL-адресу
  • Установите тип фонда на «ALL»
  • Установите «Доступность» на «Все»
  • Выберите поставщика средств из раскрывающегося списка
  • Нажмите кнопку «Фильтровать средства»
  • Нажмите кнопку «Загрузить данные (.csv)»

Этот процесс необходимо будет повторить для каждого элемента в раскрывающемся списке «Поставщик фонда».

У меня мало опыта использования IE для навигации по веб-сайтам, поэтому любые указатели приветствуются.Мой существующий код ниже.Это позволяет мне получить доступ к кнопке Тип фонда, но я не уверен, как изменить ее значения.

Option Explicit
Sub FidelityCSV()
    ' Create Internet Explorer object.
    Dim BaseURL As String
    Dim IE As Object
    Set IE = CreateObject("InternetExplorer.Application")

    BaseURL = "https://www.fidelity.co.uk/fund-prices/"
    IE.Visible = True     ' Keep this hidden.
    IE.navigate BaseURL

    Do While IE.Busy Or IE.readyState <> READYSTATE_COMPLETE
        DoEvents
    Loop

    'Wait for it to really finish loading
    Application.Wait (Now + TimeValue("0:00:15"))

    Dim oHEle 'As IHTMLElementCollection
    Dim oHDoc As HTMLDocument

    Set oHDoc = IE.document

    Set oHEle = oHDoc.getElementById("fund_type")

    ' Clean up.
    IE.Quit
    Set IE = Nothing
    Set oHEle = Nothing
    Set oHDoc = Nothing
End Sub

1 Ответ

0 голосов
/ 18 февраля 2019

XMLHTTP-запрос:

Вы можете избежать использования браузера и имитировать POST-запрос страниц

enter image description here

Option Explicit
Public Sub GetData()
    Dim sResponse As String, body As String
    body = "appliedFilters=*/INVESTMENT_COMPANY/NAME|Allianz"
    body = body & "&idolQueryParam=fund_prices"
    body = body & "&orderedUIFields=officialName,priceUpdatedDate,buy,sell,priceChange,currency"
    body = body & "&mode=all"
    Dim http As Object
    Set http = CreateObject("MSXML2.XMLHTTP")
    With http
        .Open "POST", "https://www.fidelity.co.uk/product/securities/service/funds/download-funds", False
        .setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
        .send body
        With CreateObject("ADODB.Stream")
            .Open
            .Type = 1
            .write http.responseBody
            .SaveToFile "C:\Users\User\Desktop\Data.csv", 2 
            .Close
        End With
    End With
End Sub

Использование Internet Explorer:

Ниже показано, как выполнить каждое из этих действий и установить для одного поставщика.Должно быть понятно, как можно настроить цикл для выбора других провайдеров.Пожалуйста, обратитесь ко многим ответам в StackOverflow относительно нажатия на кнопку Сохранить / Открыть.

Option Explicit    
Public Sub Download()
    Dim ie As New InternetExplorer
    With ie
        .Visible = True
        .Navigate2 "https://www.fidelity.co.uk/fund-prices/"

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

        On Error Resume Next
        .document.querySelector(".button--accept").Click '<==Cookies
        On Error GoTo 0

        With .document
            .querySelector("#fund_type").selectedIndex = 0 '<== All.
            .querySelector("#allfundsAvailability").Click '<== All
            .querySelector("#fund_provider [value='AXA']").Selected = True '<== Select provider
            .querySelector("#filterBtn").Click '<== Apply filter
            .querySelector("#ofPrint").Click ' <==Download
        End With
        Stop
        '.Quit
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...