卡住尝试使用VBA用aspx代码抓取网页

时间:2019-06-19 13:07:20

标签: excel vba web-scraping

我正在尝试自动下载此网页的内容

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 :(得分:0)

您需要触发onchange事件

HTMLSeleccionar.FireEvent "onchange"

答案 1 :(得分:0)

您只需要使用css attribute = value选择器来定位正确的年份选项。下面包括有关是否已选择它的检查。

您可以在此处看到父</tr> ID和子select标签option属性:

enter image description here

此:

value

通过首先按id .querySelector("#ContentPlaceHolder1_Fecha_ddAnio [selected]").Value 查找父select元素,然后使用descendant combinator #ContentPlaceHolder1_Fecha_ddAnio\[\]返回正确选择的年份属性选择器以在其中找到所选选项。

此:

" "

构造所需的属性=值选择器,例如

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

VBA:

[value='2018']