Застрял, пытаясь очистить веб-страницу с помощью кода aspx, используя VBA - PullRequest
1 голос
/ 19 июня 2019

Я пытаюсь автоматизировать загрузку тарифов с этой веб-страницы

https://app.cfe.mx/Aplicaciones/CCFE/Tarifas/TarifasCREIndustria/Tarifas/DemandaIndustrialSub.aspx

Sub DescargarTarifasCFE()
Dim IE As InternetExplorer
Dim HTMLDoc As HTMLDocument
Dim URL As String
Dim FechaINI As Date, FechaFIN As Date, Fecha As Date
Dim HTMLSeleccionar As HTMLSelectElement


Application.Calculate

Application.StatusBar = False

FechaINI = Sheets("Base").Range("FINI").Value  'asignamos a las variables los valores de las fechas
FechaFIN = Sheets("Base").Range("FFIN").Value

For Fecha = FechaINI To FechaFIN

    If Day(Fecha) = 1 Then 'filtro la acción cuando el dia sea 1 ... de esa manera solo hago una entrada ...


        URL = "https://app.cfe.mx/Aplicaciones/CCFE/Tarifas/TarifasCREIndustria/Tarifas/DemandaIndustrialSub.aspx"
        Set IE = CreateObject("InternetExplorer.Application")
        With IE
        .navigate URL
        Do Until .readyState = 4: DoEvents: Loop
        End With
        IE.Visible = True
        Set HTMLDoc = IE.Document

        Set HTMLSeleccionar = HTMLDoc.getElementById("ContentPlaceHolder1_Fecha_ddAnio")

        HTMLSeleccionar.Value = Year(Fecha)

       end if

      next fecha 

Я могу изменить значение года, но это действиене имеет тот же результат, чем если бы я сделать через Интернет.Я думаю, что во втором случае какой-то код выполняется .. проблема в том, что я не знаю, как повторить это действие через VBA

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

Вам просто нужно использовать селектор css attribute = value , чтобы выбрать правильный год.Следующее включает проверку того, был ли он уже выбран.

Здесь вы можете увидеть родительский select идентификатор и дочерний option тег value атрибуты:

enter image description here

This:

.querySelector("#ContentPlaceHolder1_Fecha_ddAnio [selected]").Value

возвращает правильно выбранный год, сначала найдя родительский элемент select по id #ContentPlaceHolder1_Fecha_ddAnio, затемиспользуя потомок комбинатора " " и \[\] селектора атрибутов, чтобы найти выбранную опцию в.

This:

.querySelector("[value='" & CStr(año) & "']").Selected = True

конструкцийтребуемый атрибут = селектор значения, например

[value='2018']

VBA:

Option Explicit

'VBE > Tools > References: Microsoft Internet Controls
Public Sub GetData()
    Dim ie As Object
    Set ie = CreateObject("InternetExplorer.Application")
    With ie
        .Visible = True
        .Navigate2 "https://app.cfe.mx/Aplicaciones/CCFE/Tarifas/TarifasCREIndustria/Tarifas/DemandaIndustrialSub.aspx"

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

        Dim año As Long
        año = 2018   '<== Year(Fecha)
        With .document
            If .querySelector("#ContentPlaceHolder1_Fecha_ddAnio [selected]").Value <> año Then
                .querySelector("[value='" & CStr(año) & "']").Selected = True
            End If
            Stop 'delete me later

        End With

        .Quit
    End With
End Sub
0 голосов
/ 19 июня 2019

Вам нужно запустить событие onchange

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