powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / VBA и WEB
25 сообщений из 169, страница 6 из 7
VBA и WEB
    #39839218
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneс такими знаниями никакой динамический парсер не напишешь, так что ТСу придётся делать что-то кривенькое и с ограниченными возможностямиРаз пошла такая тема, то может есть смысл расписать здесь плюсы и минусы каждого способа из имеющего набора. Пусть даже есть способ, как Вы говорите, кривенькое и с ограниченными возможностями, но заданую задачу может реализовать нормально. У сайта задана своя структура. Если в какой момент времени в таблицу добавилась колонка, переместилась или удалилась, то это можно поправить код VBA. Или прописать так в коде VBA, чтобы сам это улавливал.
...
Рейтинг: 0 / 0
VBA и WEB
    #39839221
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. есть уже готовые универсальные парсеры сайтов, ищите.
2. если хотите сами, но не понимаете как это всё работает, то стоит начать с изучения основ html
3. если основы осилили, попробуйте работать для начала с интерактивом посредством встроенного браузера (компонент интернет эксплорера), который вы можете поместить внутрь своей формы и реагировать на события DOM (ищите примеры, это делали много раз уже до вас)
...
Рейтинг: 0 / 0
VBA и WEB
    #39839229
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One1. есть уже готовые универсальные парсеры сайтов, ищите.На VBA? Надстройка для Excel?
2. если хотите сами, но не понимаете как это всё работает, то стоит начать с изучения основ htmlJavaScript надо изучать?
3. если основы осилили, попробуйте работать для начала с интерактивом посредством встроенного браузера (компонент интернет эксплорера), который вы можете поместить внутрь своей формы и реагировать на события DOM (ищите примеры, это делали много раз уже до вас)Я правильно понимаю, в excel используется объект как встроенный браузер и в зависимости куда захожу - VBA выгружает данные? Это используется совместно с JavaScript?
...
Рейтинг: 0 / 0
VBA и WEB
    #39839240
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
It was enough to add a reference to Microsoft Internet Controls ( ieframe.dll ), then use the following code in a form:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Option Explicit

Private WithEvents WB As WebBrowser

Private Sub UserForm_Activate()
  Set WB = Me.Controls.Add("Shell.Explorer.2")
  WB.Navigate "http://google.com"
End Sub

Private Sub WB_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
  Debug.Print "WB_NavigateComplete2"
End Sub
...
Рейтинг: 0 / 0
VBA и WEB
    #39839255
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,
...
Рейтинг: 0 / 0
VBA и WEB
    #39839260
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да уж, всё хуже, чем я думал. он в рантайме добавляется, а вы в дизайнтайме
...
Рейтинг: 0 / 0
VBA и WEB
    #39839263
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikkKonst_One,


правой педалью по Tollbox, в контекстном меню выбираешь "Additional Controls"
И там это :
...
Рейтинг: 0 / 0
VBA и WEB
    #39839292
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я правильно понимаю, что парсить надо с объекта pDisp.document?
...
Рейтинг: 0 / 0
VBA и WEB
    #39839309
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ничего там не надо парсить, это полное дерево DOM всех элементов документа
...
Рейтинг: 0 / 0
VBA и WEB
    #39839366
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
  <div class="pagination-is ">
    <div class="pagination"><div class="context">
      <span class="active"><span>1</span></span>
      <a href="/aaaaa/?page=2">2</a>
      <a href="/aaaaa/?page=10">10</a>
      <span class="dots">...</span> 
      <a href="/aaaaa/?page=10000">10000</a>
    </div></div>
  </div>

Почему не выгружаются элементы класса pagination ? Или не то делаю?

Объект pDisp.document имеет тип HTMLDocument. Почему не видит метод getElementsByClassName?

https://developer.mozilla.org/ru/docs/Web/API/Document/getElementsByClassName
...
Рейтинг: 0 / 0
VBA и WEB
    #39839375
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
Dim htmlDoc As MSHTML.HTMLDocument 'Microsoft HTML Object Library

Set htmlDoc = pDisp.document
'теперь можно работать с документом
...
Рейтинг: 0 / 0
VBA и WEB
    #39839405
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вышел на класс pagination , а на context не выходит.

Как правильно выйти на элементы класса context ?

В окне watсhes видно, что
- объект htmlDoc.getElementsByClassName("pagination") имеет возвращаемый тип DispHTMLElementCollection
- объект htmlDoc.getElementsByClassName("pagination")(0) имеет возвращаемый тип HTMLDivElement.
...
Рейтинг: 0 / 0
VBA и WEB
    #39839408
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
делай присвоение к переменным нужного типа (коллекциям, элементу и тп), а уже потом работай с этой переменной дальше
...
Рейтинг: 0 / 0
VBA и WEB
    #39839441
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneделай присвоение к переменным нужного типа (коллекциям, элементу и тп), а уже потом работай с этой переменной дальшеПочему в объект htmlDoc2_1 не присваивается? Хотя тип данных соответствующий.
...
Рейтинг: 0 / 0
VBA и WEB
    #39839444
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IHTMLElementCollection
...
Рейтинг: 0 / 0
VBA и WEB
    #39839450
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фрагмент HTML-кода
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<div class="pagination-is ">
    <div class="pagination"><div class="context">
      <span class="active"><span>1</span></span>
      <a href="/aaaaa/?page=2">2</a>
      <a href="/aaaaa/?page=9">9</a>
      <a href="/aaaaa/?page=10">10</a>
      <span class="dots">...</span> <a href="/aaaaa/?page=10000">10000</a>
    </div></div>
  </div>

  <p><a href="https://yandex.ru">Яндекс</a></p>
  <div>
    <p><a href="https://www.google.com">Google</a></p>
  </div>

Почему объект htmlDoc4(htmlDoc4.Length - 1) выводит " https://www.google.com "? Это же после закрытия класса context и pagination .
...
Рейтинг: 0 / 0
VBA и WEB
    #39839454
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почитай уж документацию что ли, коллекция всех элементов A в документе
...
Рейтинг: 0 / 0
VBA и WEB
    #39839464
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тупанул тут я. В каждой строке присвоения написал htmlDoc.
...
Рейтинг: 0 / 0
VBA и WEB
    #39839482
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как видим из объекта htmlDoc2, который имеет тип I HTMLElementCollection нельзя использовать как объект HTMLElementCollection, чтобы использовать метод getElementsByClassName("context"). Я правильно понимаю тип IHTMLElementCollection никак нельзя преобразовать в тип HTMLElementCollection?
...
Рейтинг: 0 / 0
VBA и WEB
    #39839483
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Написал код, определяющий количество "страничек". Но как то не красиво получается. Да еще в объект htmlDoc4 не присваивается. Как можно было написать правильнее?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Dim htmlDoc As MSHTML.HTMLDocument
Set htmlDoc = pDisp.Document
    
Dim htmlDoc2 As MSHTML.HTMLDivElement
Set htmlDoc2 = htmlDoc.getElementsByClassName("pagination")(0)
    
Dim htmlDoc3 As MSHTML.HTMLDivElement
Set htmlDoc3 = htmlDoc2.getElementsByClassName("context")(0)
    
Dim htmlDoc4 As MSHTML.DispHTMLElementCollection
Set htmlDoc4 = htmlDoc3.getElementsByTagName("a") 'Возникает ошибка "Object doesn't support this property or method"

...
Рейтинг: 0 / 0
VBA и WEB
    #39839529
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Идея заключается в том, что:
На первом этапе из всего документа вытащить коллекцию класса pagination ,
На втором этапе из полученной коллекции на первом этапе вытащить (.item(0)) коллекция класса context
На третьем этапе из полученной коллекции на втором этапе вытащить (.item(0)) коллекцию тега а
На четвертом этапе из полученной коллекции на третьем этапе вытащить (.item(последний item)) количество "страничек"

Возможно на каких то сайтах придется парсить, скажем из 10 шагов.

Скажите, так получится сделать? Или тут надо по другому делать?
...
Рейтинг: 0 / 0
VBA и WEB
    #39839530
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я правильно понимаю, что возможно сделать по следующей схеме?
HTMLDocument → IHTMLElementCollection → IHTMLElement → [n1][m1]Children → [n2][m2]Children → [n3][m3]Children → и т.д.
...
Рейтинг: 0 / 0
VBA и WEB
    #39839864
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikkНаписал код, определяющий количество "страничек". Но как то не красиво получается. Да еще в объект htmlDoc4 не присваивается. Как можно было написать правильнее?
...
Рейтинг: 0 / 0
VBA и WEB
    #39839887
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikkferzmikkНаписал код, определяющий количество "страничек". Но как то не красиво получается. Да еще в объект htmlDoc4 не присваивается. Как можно было написать правильнее?Это всё лишние "телодвижения" :)

XMLHTTP - тебе ошибкой скажет, что запрошена несуществующая страница
Если парсишь через IE, WebBrowser - то сигнатура полученной страницы будет не соответствовать "нормальной" странице, и это как условие выхода можно использовать ...
...
Рейтинг: 0 / 0
VBA и WEB
    #39839891
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
courtXMLHTTP - тебе ошибкой скажет, что запрошена несуществующая страницаПодключаешься же к запрашиваемой странице. Или это другое?
Если парсишь через IE, WebBrowser - то сигнатура полученной страницы будет не соответствовать "нормальной" странице, и это как условие выхода можно использовать ...Как быть теперь?
...
Рейтинг: 0 / 0
25 сообщений из 169, страница 6 из 7
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / VBA и WEB
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]