скопировать данные из источника веб-страницы, где URL-адрес не изменяется

Мне нужно сделать следующее

  • Перейдите на страницу http://healthapps.state.nj.us/facilities/acSetSearch.aspx?by=county.

  • Выберите « Специальная больница » и « Все амбулаторные учреждения по уходу» ПРИМЕЧАНИЕ № 2 »

  • Выберите ПОИСК
  • Прокрутите все больницы в списке
  • Нажмите на каждую больницу
  • Получить некоторые данные со страницы больницы

У меня 2 проблемы

  1. Я не знаю, как выбрать « Специальную больницу » и « Все амбулаторные учреждения по уходу» ПРИМЕЧАНИЕ № 2 »
  2. Когда я вручную выбираю эти 2 типа, а затем выбираю некоторые из больниц, URL-адрес не становится специфичным для выбора. Он становится http://healthapps.state.nj.us/facilities/acFacilityList.aspx после того, как я выберу 2 типа, а затем остаюсь таким, когда я нажимаю на больницы. Поэтому я не могу написать код, который очистит эти страницы, потому что я не знаю, как указать URL для каждой больницы.

Прошу прощения, это должен быть очень простой вопрос, но я не смог сделать что-нибудь полезное для него для Access VBA

вот код, который вытаскивает данные со страницы, я еще не делал петли, так что это всего лишь базовое притяжение исходных данных за страницей

Public Function btnGetWebData_Click() 
    Dim strURL
    Dim HTML_Content As HTMLDocument
    Dim dados As Object

    'Create HTMLFile Object
    Set HTML_Content = New HTMLDocument

    'Get the WebPage Content to HTMLFile Object
    With CreateObject("msxml2.xmlhttp")
        .Open "GET", "http://healthapps.state.nj.us/facilities/acFacilityList.aspx", False
        'http://healthapps.state.nj.us/facilities/acFacilityList.aspx
        .Send
        HTML_Content.Body.innerHTML = .responseText
        Debug.Print .responseText
        Debug.Print HTML_Content.Body.innerHTML
    End With
End Function

Всего 1 ответ


Он перемещается на каждую страницу результатов и обратно на главную страницу, чтобы использовать ссылки postBack через клики.

Option Explicit
Public Sub VisitPages()
    Dim IE As New InternetExplorer
    With IE
        .Visible = True
        .navigate "http://healthapps.state.nj.us/facilities/acSetSearch.aspx?by=county"

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

        With .document
            .querySelector("#middleContent_cbType_5").Click
            .querySelector("#middleContent_cbType_12").Click
            .querySelector("#middleContent_btnGetList").Click
        End With

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

        Dim list As Object, i  As Long
        Set list = .document.querySelectorAll("#main_table [href*=doPostBack]")
        For i = 0 To list.Length - 1
            list.item(i).Click

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

            Application.Wait Now + TimeSerial(0, 0, 3) '<== Delete me later. This is just to demo page changes
            'do stuff with new page
            .Navigate2 .document.URL             '<== back to homepage
            While .Busy Or .readyState < 4: DoEvents: Wend
            Set list = .document.querySelectorAll("#main_table [href*=doPostBack]") 'reset list (often required in these scenarios)
        Next
        Stop                                     '<== Delete me later
        '.Quit '<== Remember to quit application
    End With
End Sub

То же самое с выполнением postBacks

Option Explicit
Public Sub VisitPages()
    Dim IE As New InternetExplorer
    With IE
        .Visible = True
        .navigate "http://healthapps.state.nj.us/facilities/acSetSearch.aspx?by=county"

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

        With .document
            .querySelector("#middleContent_cbType_5").Click
            .querySelector("#middleContent_cbType_12").Click
            .querySelector("#middleContent_btnGetList").Click
        End With

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

        Dim list As Object, i  As Long, col As Collection
        Set col = New Collection
        Set list = .document.querySelectorAll("#main_table [href*=doPostBack]")
        For i = 0 To list.Length - 1
           col.Add CStr(list.item(i))
        Next
        For i = 1 To col.Count
            .document.parentWindow.execScript col.item(i)
             While .Busy Or .readyState < 4: DoEvents: Wend
            'Do stuff with page
            .Navigate2 .document.URL
            While .Busy Or .readyState < 4: DoEvents: Wend
        Next
        Stop                                     '<== Delete me later
        '.Quit '<== Remember to quit application
    End With
End Sub

Есть идеи?

10000