Читайте прямой веб-контент с Excel VBA - PullRequest
0 голосов
/ 24 мая 2018

На этом сайте много статей о том, как читать теги и таблицы на веб-сайтах с помощью Excel VBA, но я застрял здесь.

Этот веб-сайт дает мне информацию о местонахождении компаний после ввода почтового индекса.(«Где находится самое близкое местоположение относительно моего почтового индекса»)

Мне удалось перейти на сайт, ввести почтовый индекс и нажать «Отправить»:

Dim Browser As SHDocVw.InternetExplorer
Dim HTMLDoc As MSHTML.HTMLDocument


Set Browser = New SHDocVw.InternetExplorer                     ' create a browser
Browser.Visible = True                                   ' make it visible
Application.StatusBar = ".... opening page"
Browser.navigate "https://www.thewebsite.com"            ' navigate to page
WaitForBrowser Browser, 1                                ' wait for completion or timeout

Application.StatusBar = "gaining control over DOM object"
Set HTMLDoc = Browser.document                         ' load the DOM object
WaitForBrowser Browser, 1

HTMLDoc.getElementById("ZipCode").Value = "28278"
HTMLDoc.getElementById("localTeamZipSubmit").Click

Сайт открывается и открываетсясоответствующий контент выглядит следующим образом:

 <div>
        <div class="columns">
            <div class="column boldText paddingFive" style="padding-left: 20px; width: 70px;">
                Location:
            </div>
            <div class="column paddingTopFive">CHARLOTTE</div>
        </div>
        <div class="columns">
            <div class="column boldText paddingFive" style="padding-left: 20px; width: 120px;">
                Location Number:
            </div>
            <div class="column paddingTopFive">102340</div>
        </div>
        <div class="columns">
            <div class="column boldText paddingTopFive paddingLeftTwenty" style="vertical-align: top;">
                Address:
            </div>
            <div class="column paddingTopFive paddingLeftTwenty">
                <div>8848 Main St.</div>
                <div>Suite F</div>
                <div></div>
                <div>Charlotte, NC 27218</div>
            </div>
        </div>
            <div class="columns">
                <div class="column boldText paddingFive" style="padding-left: 20px; width: 70px;">
                    Phone:
                </div>
                <div class="column paddingTopFive">(704) 911-4440</div>
            </div>
                        <div class="columns">
                <div class="column boldText paddingFive" style="padding-left: 20px; width: 70px;">
                    Fax:
                </div>
                <div class="column paddingTopFive">(704) 911-4441</div>
            </div>
    </div>

Как видите, в этом разделе нет таблицы, нет именованных тегов и классов, которые используются снова и снова.Я еще не смог прочитать эту информацию.Я был бы рад получить весь блоб в строку и разобрать его "

" Text = HTMLDoc.getEverything () "

Большое спасибо за вашу помощь !!!


Тем временем я нашел другой фрагмент кода, который я изменил, но я застрял в той же точке:

Публикация и отправка работает, но как получить ответ ....

 {   Private Sub PostalCodes()
Dim ie As Object
Set ie = CreateObject("InternetExplorer.Application")
On Error GoTo errHandler
ie.Visible = 1

With ie
    .navigate "https://www.pattersondental.com/ContactUs/MyLocalTeam"
    Do While .busy: DoEvents: Loop
    Do While .ReadyState <> 4: DoEvents: Loop
    With .document.Forms("GetBranchFromZipForm")
        .ZipCode.Value = "28273"
        .submit
    End With
'    Do While Not CBool(InStrB(1, .document.URL, _
 '       "cp_search_response-e.asp"))
 '       DoEvents
  '  Loop
    Do While .busy: DoEvents: Loop
    Do While .ReadyState <> 4: DoEvents: Loop
'    MsgBox .document.all.tags("Colums").Item(1).Rows(1).Cells(1).innerText
     MsgBox .document.all.tags("Colums").innerText
  '  MsgBox .document}

Я думаю, мне нужно искать "нет", как разбирать HTML-документ ... ...

Добавить:

Кажется, что в то время как ie является допустимым (вокно просмотра) IE.Document пусто ... почему это может быть, веб-сайт все еще там с новыми данными. Я даже попробовал другой фрагмент кода, который ищет открытые веб-сайты в IE, он находит сайт (с правильными данными)но документ все еще пуст и getelementBY ... ничего не находит, конечно. Я собираюсь начать пить ...

1 Ответ

0 голосов
/ 27 мая 2018

Я не могу в это поверить.

После 3 дней тыкания я нашел это:

  With ActiveSheet.QueryTables.Add(Connection:="URL;     
  https://www.pattersondental.com/ContactUs/MyLocalTeam",   
  Destination:=Range("A1"))
 .PostText = "ZipCode=70032"
 .RefreshStyle = xlOverwriteCells
 .SaveData = True
 .Refresh

Я не претендую на то, чтобы понять, почему это работает, но это делает.

Джон, я все еще проверю, что ты предложил.Спасибо

...