VBA-код, чтобы получить расположение рядом с URL-адрес, чтобы преуспеть - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь получить информацию о подключении, инфраструктуре и соседстве от URL-адреса, чтобы преуспеть ниже, это код vba, который я пробовал, но я получаю сообщение об ошибке Run-Time Error '91': переменная объекта или переменная блока не установлена.

Sub test()
Dim oHtml As HTMLDocument
Dim oElement As Object
Set oHtml = New HTMLDocument
With CreateObject("WINHTTP.WinHTTPRequest.5.1")
.Open "GET", "https://www.99acres.com/dasnac-the-jewel-of-noida-sector-75-noida-npxid-r14046?src=NPSRP&sid=UiB8IFFTIHwgUyB8IzEjICB8IG5vaWRhIzUjIHwgQ1AyNSB8IFkgIzE4I3wgIHwgMjUgfCMzIyAgfCA3ICM1I3wgIHwgMjMgfCM0MyMgIHw="
.Send
oHtml.body.innerHTML = .responseText
End With
ele3 = oHtml.getElementById("locHighlightsSlide")
Range("A1") = ele3.innerText
End Sub

Ниже мой HTML-код

<div class="vsp-SliderBar" id="locHighlightsSlide">
                    <div class="amnLeftScroll noVis amenitiesScrollArrow dev_leftlocHightlights">        
                        <i class="xid_icons xid_icons_1x xid_leftarrow1x"></i>            
                    </div>
                    <div class="vsp-container">
                        <div class="vsp-itemsFilm clearAfter animTransMrg350">
                                                <div class="vsp-item highlightsCard">
                            <div class="highlightsCardHeading">Connectivity</div>
                                                            <div class="highlightsCardRow jsinteraction" style="overflow: visible;">
                                    <div class="highlightsCardCol">
                                        <i class="xid_icons xid_icons_1x xid_loc_metro"></i>
                                    </div>
                                    <div class="highlightsCardCol jsinteraction" style="overflow: visible;">
                                        <span class="highlightPoint">Wave City Centr...</span>
                                        <span class="overflowItem" style="top:auto;z-index: 1">Wave City Centre</span>                                                                            </div>
                                    <div class="highlightsCardCol">4 km | 20 min</div>
                                </div>
                                                            <div class="highlightsCardRow jsinteraction" style="overflow: visible;">
                                    <div class="highlightsCardCol">
                                        <i class="xid_icons xid_icons_1x xid_loc_metro"></i>
                                    </div>
                                    <div class="highlightsCardCol jsinteraction" style="overflow: visible;">
                                        <span class="highlightPoint">Golf Course Sta...</span>
                                        <span class="overflowItem" style="top:auto;z-index: 1">Golf Course Station</span>                                                                            </div>
                                    <div class="highlightsCardCol">5 km | 25 min</div>
                                </div>
                                                    </div>
                        <div class="vsp-item highlightsCard" id="viewMore_Connectivity" style="display: none;">
                                                            <div class="highlightsCardRow jsinteraction rel" style="overflow: visible;">
                                    <div class="highlightsCardCol">
                                        <i class="xid_icons xid_icons_1x xid_loc_metro"></i>
                                    </div>
                                    <div class="highlightsCardCol jsinteraction" style="overflow: visible;">
                                        <span class="highlightPoint">Wave City Centr...</span>
                                        <span class="overflowItem" style="top:auto;z-index: 1">Wave City Centre</span>                                                                            </div>
                                    <div class="highlightsCardCol">4 km | 20 min</div>
                                </div>
                                                            <div class="highlightsCardRow jsinteraction rel" style="overflow: visible;">
                                    <div class="highlightsCardCol">
                                        <i class="xid_icons xid_icons_1x xid_loc_metro"></i>
                                    </div>
                                    <div class="highlightsCardCol jsinteraction" style="overflow: visible;">
                                        <span class="highlightPoint">Golf Course Sta...</span>
                                        <span class="overflowItem" style="top:auto;z-index: 1">Golf Course Station</span>                                                                            </div>
                                    <div class="highlightsCardCol">5 km | 25 min</div>
                                </div>
                                                    </div>
                                                <div class="vsp-item highlightsCard">
                            <div class="highlightsCardHeading">Infrastructure</div>
                                                            <div class="highlightsCardRow jsinteraction" style="overflow: visible;">
                                    <div class="highlightsCardCol">
                                        <i class="xid_icons xid_icons_1x xid_loc_education"></i>
                                    </div>
                                    <div class="highlightsCardCol jsinteraction" style="overflow: visible;">
                                        <span class="highlightPoint">Manav Rachna In...</span>
                                        <span class="overflowItem" style="top:auto;z-index: 1">Manav Rachna International School</span>                                                                            </div>
                                    <div class="highlightsCardCol">2 km | 15 min</div>
                                </div>
                                                            <div class="highlightsCardRow jsinteraction" style="overflow: visible;">
                                    <div class="highlightsCardCol">
                                        <i class="xid_icons xid_icons_1x xid_loc_education"></i>
                                    </div>
                                    <div class="highlightsCardCol jsinteraction" style="overflow: visible;">
                                        <span class="highlightPoint">Global Indian I...</span>
                                        <span class="overflowItem" style="top:auto;z-index: 1">Global Indian International School</span>                                                                            </div>
                                    <div class="highlightsCardCol">2 km | 15 min</div>
                                </div>
                                                            <div class="highlightsCardRow jsinteraction" style="overflow: visible;">
                                    <div class="highlightsCardCol">
                                        <i class="xid_icons xid_icons_1x xid_loc_health"></i>
                                    </div>
                                    <div class="highlightsCardCol jsinteraction" style="overflow: visible;">
                                        <span class="highlightPoint">Neo Hospital</span>
                                                                                                                    </div>
                                    <div class="highlightsCardCol">3 km | 15 min</div>
                                </div>
                                                    </div>
                        <div class="vsp-item highlightsCard" id="viewMore_Infrastructure" style="display: none;">
                                                            <div class="highlightsCardRow jsinteraction rel" style="overflow: visible;">
                                    <div class="highlightsCardCol">
                                        <i class="xid_icons xid_icons_1x xid_loc_education"></i>
                                    </div>
                                    <div class="highlightsCardCol jsinteraction" style="overflow: visible;">
                                        <span class="highlightPoint">Manav Rachna In...</span>
                                        <span class="overflowItem" style="top:auto;z-index: 1">Manav Rachna International School</span>                                                                            </div>
                                    <div class="highlightsCardCol">2 km | 15 min</div>
                                </div>
                                                            <div class="highlightsCardRow jsinteraction rel" style="overflow: visible;">
                                    <div class="highlightsCardCol">
                                        <i class="xid_icons xid_icons_1x xid_loc_education"></i>
                                    </div>
                                    <div class="highlightsCardCol jsinteraction" style="overflow: visible;">
                                        <span class="highlightPoint">Global Indian I...</span>
                                        <span class="overflowItem" style="top:auto;z-index: 1">Global Indian International School</span>                                                                            </div>
                                    <div class="highlightsCardCol">2 km | 15 min</div>
                                </div>
                                                            <div class="highlightsCardRow jsinteraction rel" style="overflow: visible;">
                                    <div class="highlightsCardCol">
                                        <i class="xid_icons xid_icons_1x xid_loc_health"></i>
                                    </div>
                                    <div class="highlightsCardCol jsinteraction" style="overflow: visible;">
                                        <span class="highlightPoint">Neo Hospital</span>
                                                                                                                    </div>
                                    <div class="highlightsCardCol">3 km | 15 min</div>
                                </div>
                                                    </div>
                                                <div class="vsp-item highlightsCard">
                            <div class="highlightsCardHeading">Neighborhood</div>
                                                            <div class="highlightsCardRow jsinteraction" style="overflow: visible;">
                                    <div class="highlightsCardCol">
                                        <i class="xid_icons xid_icons_1x xid_loc_village"></i>
                                    </div>
                                    <div class="highlightsCardCol jsinteraction" style="overflow: visible;">
                                        <span class="highlightPoint">Sector-72</span>
                                                                                                                    </div>
                                    <div class="highlightsCardCol">3 km | 15 min</div>
                                </div>
                                                            <div class="highlightsCardRow jsinteraction" style="overflow: visible;">
                                    <div class="highlightsCardCol">
                                        <i class="xid_icons xid_icons_1x xid_loc_village"></i>
                                    </div>
                                    <div class="highlightsCardCol jsinteraction" style="overflow: visible;">
                                        <span class="highlightPoint">Sector-76</span>
                                                                                                                    </div>
                                    <div class="highlightsCardCol">3 km | 15 min</div>
                                </div>
                                                            <div class="highlightsCardRow jsinteraction" style="overflow: visible;">
                                    <div class="highlightsCardCol">
                                        <i class="xid_icons xid_icons_1x xid_loc_village"></i>
                                    </div>
                                    <div class="highlightsCardCol jsinteraction" style="overflow: visible;">
                                        <span class="highlightPoint">Sector-51</span>
                                                                                                                    </div>
                                    <div class="highlightsCardCol">3 km | 15 min</div>
                                </div>
                                                    </div>
                        <div class="vsp-item highlightsCard" id="viewMore_Neighborhood" style="display: none;">
                                                            <div class="highlightsCardRow jsinteraction rel" style="overflow: visible;">
                                    <div class="highlightsCardCol">
                                        <i class="xid_icons xid_icons_1x xid_loc_village"></i>
                                    </div>
                                    <div class="highlightsCardCol jsinteraction" style="overflow: visible;">
                                        <span class="highlightPoint">Sector-72</span>
                                                                                                                    </div>
                                    <div class="highlightsCardCol">3 km | 15 min</div>
                                </div>
                                                            <div class="highlightsCardRow jsinteraction rel" style="overflow: visible;">
                                    <div class="highlightsCardCol">
                                        <i class="xid_icons xid_icons_1x xid_loc_village"></i>
                                    </div>
                                    <div class="highlightsCardCol jsinteraction" style="overflow: visible;">
                                        <span class="highlightPoint">Sector-76</span>
                                                                                                                    </div>
                                    <div class="highlightsCardCol">3 km | 15 min</div>
                                </div>
                                                            <div class="highlightsCardRow jsinteraction rel" style="overflow: visible;">
                                    <div class="highlightsCardCol">
                                        <i class="xid_icons xid_icons_1x xid_loc_village"></i>
                                    </div>
                                    <div class="highlightsCardCol jsinteraction" style="overflow: visible;">
                                        <span class="highlightPoint">Sector-51</span>
                                                                                                                    </div>
                                    <div class="highlightsCardCol">3 km | 15 min</div>
                                </div>
                                                    </div>
                                                </div>
                    </div>
                    <div class="amnRightScroll amenitiesScrollArrow dev_rightLocHighlights">                  
                        <i class="xid_icons xid_icons_1x xid_rightarrow1x dev_vsp-Next"></i>            
                    </div>
                </div>

Пожалуйста, найдите ниже рисунок, который показывает данные, которые мне нужны.

enter image description here

1 Ответ

0 голосов
/ 12 июня 2018

Вы можете использовать CSS селекторы, которые являются шаблонами, используемыми для выбора элемента (ов).Для вашего примера примеров HTML используются следующие шаблоны:

  1. Первый столбец с: .vsp-item.highlightsCard:first-child
  2. Второй столбец с: .vsp-item.highlightsCard:nth-child(2)
  3. Третий столбец с: .vsp-item.highlightsCard:last-child
  4. Заголовки с: .highlightsCardHeading

В перечисленных выше селекторах . является селектором класса , т.е. выбирает элементы с помощью className.


Результаты CSS-запроса :

Столбец 1 Связь:

Column 1

Колонка 2 Инфраструктура:

Column 2

Колонка 3 Окрестности:

Column 3

Заголовки:

Headers

Замечания:Приведенные выше результаты запроса показывают, что для Columns 1-3 требуется один узел, т. е. .querySelector;обратите внимание, что 0 является единственным возвращенным совпадением.Принимая во внимание, что .querySelectorAll потребуется для Headers, возвращающего nodeList, как мы видим, 0-2 возвращено.


VBA:

IНе удается получить доступ к веб-сайту для запроса, но метод .querySelector принадлежит HTMLDocument и обычно (с использованием переменной HTMLDocument oHTML):

Для одного узла:

oHtml.querySelector(".vsp-item.highlightsCard:first-child")

ДляnodeList:

oHtml.querySelectorAll(".highlightsCardHeading")

Если nodeList, вы перебираете его элементы с помощью:

Dim headerNodeList As Object, i As Long
Set headerNodeList = oHtml.querySelectorAll(".highlightsCardHeading")

For i = 0 To headerNodeList.Length - 1
    Debug.Print headerNodeList.item(i).innerText '<==this way          '
   'Debug.Print headerNodeList(i).innerText    '<==Or this method
Next i

Для одного элемента используйте .querySelector и .innerText:

Dim col1Node As Object: Set col1Node = oHtml.querySelector(".vsp-item.highlightsCard:first-child"): Debug.Print col1Node.innerText
Dim col2Node As Object: Set col2Node = oHtml.querySelector(".vsp-item.highlightsCard:nth-child(2)"): Debug.Print col2Node.innerText
Dim col3Node As Object: Set col3Node = oHtml.querySelector(".vsp-item.highlightsCard:last-child") : Debug.Print col3Node.innerText 

Примечания:

Я не могу проверить .responseText по вашему запросу (или, скорее, он не имеет смысла из-за сбоя подключения к сайту).Может случиться так, что этот метод не вернет необходимую информацию, особенно с динамически загружаемыми страницами.Тем не менее, я полагаю, что WinHTTPRequest.5.1 имеет статус ответа, который вы можете использовать.

В этом случае вам может понадобиться другой метод, такой как браузер IE, и дождаться загрузки страницы.Вы все равно будете использовать .querySelector или .querySelectorAll метод HTMLDocument.


Примеры сценариев:

  1. Метод для IE здесь: https://stackoverflow.com/a/50613063/6241235
  2. Метод для WinHTTP: https://stackoverflow.com/a/50759945/6241235 ИЛИ https://stackoverflow.com/a/50757822/6241235

Информация:

  1. HTMLDOM метод querySelector ()
  2. Селекторы CSS
...