очистить данные из источника веб-страницы, где URL не меняется - PullRequest
0 голосов
/ 03 октября 2018

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

  • Перейти к 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 для каждой больницы.

Я прошу прощения, это должно быть очень простойвопрос, но я не смог найти в Google что-нибудь полезное для 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 Ответ

0 голосов
/ 04 октября 2018

Переходит на каждую страницу результатов и обратно на домашнюю страницу между ними, чтобы использовать ссылки 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...