Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Office Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3 4 5 6 7      [все]
 VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Здравствуйте!

Есть задача: написать макрос, который автоматизирует выгрузку данных из сайта.

Особенности:
- Выгружает основной список с колонками. В каждой строке в определенной колонке есть ссылка
- Если зайти на эту ссылку, то выходим на новую страницу этого же элемента: на таблицу со всеми свойствами. В другой закладке этой же страницы элемента есть дочерний список. Есть ссылка для скачивание файла.
- Основной список разделен на страницы, присутствует фильтрация.

Есть вопросы. Скажите,
1. Для выгрузки данных какой лучше использовать объект: CreateObject("MSXML2.XMLHTTP") или CreateObject("Microsoft.XMLHTTP")? Или лучше использовать какой то другой объект?
2. Как выдергивать список? Только через полученный исходный код как текст, и потом через цикл и как то по тегам выдергивать элементы? Или есть специальная команда для выдергивании списков?
3. Если список разделен на страницы, то получится выгрузить сразу все страницы? Или только по странично? Если выгружать по странично, то важно учесть, что может быть такое, что какой то элемент списка в какой то момент времени может удалиться, добавиться или переместиться. Возможно ли это учесть?
9 июл 19, 19:46    [21923763]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
ferzmikk,

1. Говорят, что MSXML2 более новый namespace, и вроде рекомендуют его.
2. Для кролинга/скрапинга лучше воспользоваться HTMLDocument, и далее при помощи его функционала выдергивать, что нужно. Не помню, но возможно, там даже есть XPath, что существенно облегчит жизнь.
3. Что значит "список разделен на страницы"? Посмотрите как выглядит html и, исходя из этого, парсите.
9 июл 19, 23:22    [21923858]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
iMrTidy
ferzmikk,

1. Говорят, что MSXML2 более новый namespace, и вроде рекомендуют его.
Файлы скачивает?
10 июл 19, 00:09    [21923866]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
iMrTidy
2. Для кролинга/скрапинга лучше воспользоватьсяHTMLDocument, и далее при помощи его функционала выдергивать, что нужно. Не помню, но возможно, там даже есть XPath, что существенно облегчит жизнь.
Возникает вопрос как это все реализовывать в VBA. В интернете мало инфо на эту тему.
10 июл 19, 17:24    [21924327]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 553
ferzmikk,
именно потому что у vba нет соответствующих возможностей вы и создаете объект
CreateObject("MSXML2.XMLHTTP")
и пользуетесь его свойствами и методами.
10 июл 19, 22:27    [21924442]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Объект "MSXML2.XMLHTTP" относится к JavaScript?
10 июл 19, 23:11    [21924455]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20688
ferzmikk
Объект "MSXML2.XMLHTTP" относится к JavaScript?
нет


на форуме полно примеров, которые легко находятся по словам MSXML2.XMLHTTP
11 июл 19, 00:06    [21924464]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
court
Member

Откуда:
Сообщений: 1806
ferzmikk
1. Для выгрузки данных какой лучше использовать объект: CreateObject("MSXML2.XMLHTTP") или CreateObject("Microsoft.XMLHTTP")? Или лучше использовать какой то другой объект?

Экселем парси, - "дешево и сердито"
11 июл 19, 12:55    [21924807]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
iMrTidy
3. Что значит "список разделен на страницы"? Посмотрите как выглядит html и, исходя из этого, парсите.

Первая страница http://aaaaa.ru/bbbbb/
Вторая страница http://ааааа.ru/bbbbb/?page=2

Как определить всего таких страниц?
11 июл 19, 20:56    [21925249]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
В VBA использую объекты InternetExplorer и HTMLDocument. В объекте пока не нахожу метода, который определяет количество всего таких страниц.
11 июл 19, 21:33    [21925262]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
В коде страницы это количество находится здесь
<span class="dots">...</span> <a href="/aaaaa/?page=15000">15000</a>

Я правильно понимаю, что надо вытаскивать после page= и ">?
11 июл 19, 21:34    [21925263]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
ferzmikk,

Судя по вопросам, Вам для начала стоит подтянуть знания про HTML и протокол HTTP(S). И даже, возможно, написать Hello World веб-страничку.
12 июл 19, 03:14    [21925368]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
court
Member

Откуда:
Сообщений: 1806
iMrTidy
подтянуть знания про HTML и протокол HTTP(S)
бгггы ! Картинка с другого сайта.
а чё не сразу TCP/IP какое-нибудь ? :)
ТСу нужно распарсить какую-то несчастную страничку, а ты его сразу посылаешь "куда по дальше" "протоколы учить" :)

-------------------------------------------

ТС,

разбирать HTML DOM - дело предельно неблагодарное !
Редко когда повезёт, и DOM будет валидным XML-ем и его можно загрузить XMLDOMDocument и разобрать "по-человечески" каким-нибудь XPath-ем :)
Разве что это будет сайт в строгом соответствии стандарту HTML5 (?)

В лучшем случае, это "выкусить" строковыми функциями требуемый "кусок" DOM-а, который будет валидным, и разбирать его в XMLDOMDocument-е

По этому, ещё раз, может не дошло сразу: попробуй открыть свою ссылку в Экселе (Файл-Открыть-заряжаешь свою ссылку на страницу-"Открыть") и посмотреть на результат.
"Бегать" по ячейкам, всё-таки, на порядок проще, чем парсить строковыми функциями "кривой" DOM
12 июл 19, 09:44    [21925454]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
court
попробуй открыть свою ссылку в Экселе (Файл-Открыть-заряжаешь свою ссылку на страницу-"Открыть") и посмотреть на результат.
"Бегать" по ячейкам, всё-таки, на порядок проще, чем парсить строковыми функциями "кривой" DOM

Открывает долго. Вывелось по ячейкам.
12 июл 19, 13:56    [21925725]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
court
Member

Откуда:
Сообщений: 1806
ferzmikk
Открывает долго.
не дольше чем полная загрузка в ИЕ
ferzmikk
Вывелось по ячейкам.
Ну ? Дальше алгоритм понятен ?
1. Ходишь по нужным ячейкам - собираешь лут нужные данные, сохраняешь нужные данные
2. Ходишь по другим нужным ячейкам - собираешь ссылки ("В каждой строке в определенной колонке есть ссылка")
3. Ходишь по собранным ссылкам и повторяешь пп.1,2
4. ...
5. PROFIT

Всё это, разумеется, программно, через автоматизацию Экселя
12 июл 19, 14:23    [21925741]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
court
Ну ? Дальше алгоритм понятен ?
1. Ходишь по нужным ячейкам - собираешь лут нужные данные, сохраняешь нужные данные
2. Ходишь по другим нужным ячейкам - собираешь ссылки ("В каждой строке в определенной колонке есть ссылка")
3. Ходишь по собранным ссылкам и повторяешь пп.1,2
4. ...
5. PROFIT

Всё это, разумеется, программно, через автоматизацию Экселя

Сама идея понятна. Как вариант. Учитывая, что нужная ячейка имеет свою координату (например, заголовок таблицы, название первого столбца таблицы, значение первой строки первой колонки таблицы и т.д.) и после обновления могут быть сдвиги. В качестве ориентира тогда нужно брать, например заголовок колонки и последующие шаги по строкам. В ячейках (значения строк таблицы) присутствуют перенос строк и выводит несколько ячеек, а остальные ячейки объединяются. Поэтому такой момент надо учитывать.
12 июл 19, 14:44    [21925768]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Есть такой фрагмент работающего кода.
Dim IE As Object, Html As Object
Set IE = CreateObject("InternetExplorer.Application")
Set Html = IE.Document
'Вытаскиваем таблицу
Html.querySelectorAll("table tr")
'Вытаскиваем столбцы строки N
Html.querySelectorAll("table tr").Item(N).querySelectorAll("th,td")
'Вытаскиваем значения каждого столбца строки N
Html.querySelectorAll("table tr").Item(N).querySelectorAll("th,td").Item(I).innertext

Если вместо объекта "InternetExplorer.Application" использовать объект "MSXML2.XMLHTTP", то пишем такой код
Set XMLHTTP = CreateObject("MSXML2.XMLHTTP")
Set Html = CreateObject("htmlFile")
XMLHTTP.Open "GET", URL, False
XMLHTTP.SEND
If XMLHTTP.Status = 200 Then
    Html.body.innerHTML = XMLHTTP.responseText
    Html.querySelectorAll("table tr")    'Здесь возникает ошибка

Выдает ошибку "Object doesn't support this property or method".

Как из объекта "MSXML2.XMLHTTP" вытащить Document, чтобы присвоить переменной Html?
12 июл 19, 16:07    [21925868]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
Konst_One
Member

Откуда:
Сообщений: 11487
XMLHTTP.responseText

вы его смотрели?
12 июл 19, 16:40    [21925919]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Konst_One
XMLHTTP.responseText

вы его смотрели?

Если Вы про возвращаемые типы, то у обоих объектов Html.body.innerHTML и XMLHTTP.responseText возвращаемый тип Variant/String.

Если Вы про возвращаемое значение XMLHTTP.responseText
<!DOCTYPE html>
<html         lang="ru">
<head>
<link rel="stylesheet" type="text/css" href="/media/aaaaa/css/font-awesome.min.css">
<link type="text/css" href="/media/aaaaa/lib/jquery-ui/jquery-ui.css" rel="stylesheet">
<link type="text/css" href="/media/aaaaa/lib/swiper/swiper.css" rel="stylesheet">
<meta charset="windows-1251">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Заголовк</title>
...
12 июл 19, 17:35    [21925962]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
court
Member

Откуда:
Сообщений: 1806
ferzmikk
    Html.body.innerHTML = XMLHTTP.responseText
    Html.querySelectorAll("table tr")    'Здесь возникает ошибка


что-то типа
Html.write XMLHTTP.responseText

должно быть
12 июл 19, 17:36    [21925963]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
court
что-то типа
Html.write XMLHTTP.responseText

должно быть
'Html.body.innerHTML = XMLHTTP.responseText
Html.write XMLHTTP.responseText
Html.querySelectorAll("table tr")    'Выдает диалоговое окно. Если нажать на "Да" или "Нет", то потом возникает та же ошибка.


К сообщению приложен файл. Размер - 21Kb
12 июл 19, 18:47    [21926000]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5249
ferzmikk,

а я бы php взял, удобнее гораздо
12 июл 19, 20:09    [21926030]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
kealon(Ruslan)
ferzmikk,

а я бы php взял, удобнее гораздо

php не знаю. Пока использую VBA
12 июл 19, 20:32    [21926035]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5249
ferzmikk,

там очень удобный и достаточно надёжный преобразователь html в xml

        $c = file_get_contents($url);
        $doc = new DOMDocument();
        $doc->loadHTML($c);

ну а дальше довольно тривиально ищется что нужно

$doc->getElementsByTagName('a');
13 июл 19, 00:18    [21926076]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
ferzmikk
'Html.body.innerHTML = XMLHTTP.responseText
Html.write XMLHTTP.responseText
Html.querySelectorAll("table tr")    'Выдает диалоговое окно. Если нажать на "Да" или "Нет", то потом возникает та же ошибка.

Почему отображается такое диалоговое окно и почему показывает ошибку? Как правильно написать?
13 июл 19, 01:22    [21926084]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
court
Member

Откуда:
Сообщений: 1806
ferzmikk,

подключи в Reference эту библиотеку - Microsoft HTML Object Library
и используй
Dim Html As HTMLDocument
13 июл 19, 08:25    [21926101]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
court
ferzmikk,

подключи в Reference эту библиотеку - Microsoft HTML Object Library
и используй
Dim Html As HTMLDocument

Получилось. Только почему не срабатывает, когда пишем так Set Html = CreateObject("htmlFile")? По логике изменили только позднее связывание на ранее.


Теперь появляется ошибка на другой строке
'Set Html = CreateObject("htmlFile")
Dim Html As New HTMLDocument
...
Html.body.innerHTML = XMLHTTP.responseText
Html.querySelectorAll("table tr")
For N = 1 To .Length - 1
        Html.querySelectorAll("table tr").Item(N).querySelectorAll("th,td") 'Выдает ошибку "Object doesn't support this property or method".

Почему так? Как правильно написать?
13 июл 19, 10:04    [21926111]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
court
Member

Откуда:
Сообщений: 1806
ferzmikk,

у тебя ж подключена библиотека
вот и зайди по ф2 и посмотри что за класс у Итема и какие у него методы
13 июл 19, 11:02    [21926119]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
court
ferzmikk,

у тебя ж подключена библиотека
вот и зайди по ф2 и посмотри что за класс у Итема и какие у него методы

Правильно смотрю?

К сообщению приложен файл. Размер - 128Kb
13 июл 19, 12:39    [21926133]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
+Использование CreateObject("InternetExplorer.Application"). Работающий код
Sub ПолучитьТабличноеСодержимое()
    'Dim IE As New InternetExplorer, Html As HTMLDocument
    Dim IE As Object, Html As Object
    Dim I As Long, N As Long, Row As Long, Column As Long
    
    Set IE = CreateObject("InternetExplorer.Application")
        
    With IE
        .Visible = False
        .Navigate "http://aaaaa.ru/bbbbb/"
        While .Busy = True Or .ReadyState < 4
            DoEvents
        Wend
        Set Html = .Document
    
        With Html.querySelectorAll("table tr")
            For N = 1 To .Length - 1
                With .Item(N).querySelectorAll("th,td")
                    For I = 0 To .Length - 1
                        Column = Column + 1
                        ThisWorkbook.Worksheets("Лист1").Cells(Row + 1, Column) = .Item(I).innertext
                    Next I
                    Column = 0
                    Row = Row + 1
                End With
            Next N
        End With
    End With
    
    Set Html = Nothing
    Set IE = Nothing
End Sub
+Использование CreateObject("MSXML2.XMLHTTP"). Не работающий код
Sub ПолучитьТабличноеСодержимое()
Dim XMLHTTP As Object '
'Dim Html As Object
Dim URL As String, txt As String
URL = "http://aaaaa.ru/bbbbb/"

Set XMLHTTP = CreateObject("MSXML2.XMLHTTP")
'Set Html = CreateObject("htmlFile")
Dim Html As New HTMLDocument

XMLHTTP.Open "GET", URL, False
XMLHTTP.SetRequestHeader "Accept", "..." 'Сокращено для примера
XMLHTTP.SetRequestHeader "User-Agent", "..." 'Сокращено для примера
XMLHTTP.SEND

Dim I As Long, Column As Long, N As Long, Row As Long

If XMLHTTP.Status = 200 Then
    Html.body.innerHTML = XMLHTTP.responseText
    With Html.querySelectorAll("table tr")
        For N = 1 To .Length - 1
            With .Item(N).querySelectorAll("th,td") 'Выдает ошибку "Object doesn't support this property or method".
                For I = 0 To .Length - 1
                    Column = Column + 1
                    ThisWorkbook.Worksheets("Лист1").Cells(Row + 1, Column) = .Item(I).innertext
                Next I
                Column = 0
                Row = Row + 1
            End With
        Next N
    End With
Else
    MsgBox ("Отсутствует соединение ...")
End If

Set XMLHTTP = Nothing
End Sub

Фишка в том, что в первом варианте метод Html.querySelectorAll("table tr").Item(N).querySelectorAll("th,td") работает, а во втором - не работает. В первом варианте для объекта HTMLDocument позднее связывание, а во втором - ранее.

Как правильно написать код?
13 июл 19, 13:12    [21926135]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
court
iMrTidy
подтянуть знания про HTML и протокол HTTP(S)
бгггы ! Картинка с другого сайта.
а чё не сразу TCP/IP какое-нибудь ? :)
ТСу нужно распарсить какую-то несчастную страничку, а ты его сразу посылаешь "куда по дальше" "протоколы учить" :)


Мда, лихо. По-вашему лучше несколько суток тыкаться и просить о помощи, чем почитать документацию, пусть даже в течение дня. Ну, туда Вам и дорога.

court
ТС,

разбирать HTML DOM - дело предельно неблагодарное !
Редко когда повезёт, и DOM будет валидным XML-ем и его можно загрузить XMLDOMDocument и разобрать "по-человечески" каким-нибудь XPath-ем :)
Разве что это будет сайт в строгом соответствии стандарту HTML5 (?)

В лучшем случае, это "выкусить" строковыми функциями требуемый "кусок" DOM-а, который будет валидным, и разбирать его в XMLDOMDocument-е

По этому, ещё раз, может не дошло сразу: попробуй открыть свою ссылку в Экселе (Файл-Открыть-заряжаешь свою ссылку на страницу-"Открыть") и посмотреть на результат.
"Бегать" по ячейкам, всё-таки, на порядок проще, чем парсить строковыми функциями "кривой" DOM


А че не сторонний апп сразу? Человеку ж просто нужно несчастную страничку распарсить. На XPath свет клином не сошелся.
13 июл 19, 14:33    [21926152]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
ferzmikk,

Вот пример на скорую руку. Чтобы более или менее удобно парсить дочерние элементы можно написать маленькую функцию, что будет возвращать элемент или элементы по заданному условию или условиям.

Option Explicit

Sub Test()

Dim xmlHttpReq As MSXML2.XMLHTTP60
Dim doc As MSHTML.HTMLDocument
Dim elem As MSHTML.HTMLHtmlElement
Dim node As MSHTML.HTMLHtmlElement

Set xmlHttpReq = New MSXML2.XMLHTTP60

xmlHttpReq.Open "GET", "https://www.sql.ru/forum/1314633-2/vba-i-web", False
xmlHttpReq.send

If xmlHttpReq.readyState = 4 And xmlHttpReq.Status = 200 Then
    Set doc = New MSHTML.HTMLDocument
    doc.body.innerHTML = xmlHttpReq.responseText
    Set elem = doc.querySelector("table.sort_options")
    For Each node In elem.ChildNodes
        Debug.Print node.innerText
    Next
Else
    MsgBox "Error" & vbNewLine & "Ready State: " & xmlHttpReq.readyState & vbNewLine & "Status: " & xmlHttpReq.Status
End If


End Sub
13 июл 19, 15:56    [21926174]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
iMrTidy,

В общем, в выделенной строке изменил запись. Заработало.

+
Sub ПолучитьТабличноеСодержимое()
Dim XMLHTTP As Object '
'Dim Html As Object
Dim URL As String, txt As String
URL = "http://aaaaa.ru/bbbbb/"

Set XMLHTTP = CreateObject("MSXML2.XMLHTTP")
'Set Html = CreateObject("htmlFile")
Dim Html As New HTMLDocument

XMLHTTP.Open "GET", URL, False
XMLHTTP.SetRequestHeader "Accept", "..." 'Сокращено для примера
XMLHTTP.SetRequestHeader "User-Agent", "..." 'Сокращено для примера
XMLHTTP.SEND

Dim I As Long, Column As Long, N As Long, Row As Long

If XMLHTTP.Status = 200 Then
    Html.body.innerHTML = XMLHTTP.responseText
    With Html.querySelectorAll("table tr")
        For N = 1 To .Length - 1
            With .Item(N).ChildNodes 'querySelectorAll("th,td") 
                For I = 0 To .Length - 1
                    Column = Column + 1
                    ThisWorkbook.Worksheets("Лист1").Cells(Row + 1, Column) = .Item(I).innertext
                Next I
                Column = 0
                Row = Row + 1
            End With
        Next N
    End With
Else
    MsgBox ("Отсутствует соединение ...")
End If

Set XMLHTTP = Nothing
End Sub
13 июл 19, 23:00    [21926298]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
1. Пока не понятно как узнать в таблице сколько всего страниц и как выгружать с заданным фильтром. Как это в коде должно выглядеть?

2. В таблице в одной колонке есть перенос строк, то есть несколько подстрок. У этих значений есть ссылки.
+Фрагмент HTML-кода таблицы
<tr class=" ">
	<td>Значение1 столбца1</td>
        <td style="text-align: center;">
        	<a href="?notificationId=00001">Значение1_1 столбца2</a>
        	<br><br>
                <a href="?notificationId=00001&lotId=00001">Значение1_2 столбца2</a></td>
        <td>Значение1 столбца3</td>
        <td nowrap>Значение1 столбца4</td>
        <td>Значение1 столбца5</td>
</tr>
<tr class="even ">
        <td>Значение2 столбца1</td>
        <td style="text-align: center;">
        	<a href="?notificationId=00001">Значение2_1 столбца2</a>
        	<br><br>
                <a href="?notificationId=00001&lotId=00002">Значение2_2 столбца2</a></td>
        <td>Значение2 столбца3</td>
        <td nowrap>Значение2 столбца4</td>
        <td>Значение2 столбца5</td>
</tr>
<tr class=" ">
       <td>Значение3 столбца1</td>
        <td style="text-align: center;">
        	<a href="?notificationId=00001">Значение3_1 столбца2</a>
        	<br><br>
                <a href="?notificationId=00001&lotId=00003">Значение3_2 столбца2</a></td>
        <td>Значение3 столбца3</td>
        <td nowrap>Значение3 столбца4</td>
        <td>Значение3 столбца5</td>
</tr>
Как в коде прописать так, чтобы выгрузить эти значения как массив и ссылки к нему?
13 июл 19, 23:16    [21926302]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
iMrTidy
Чтобы более или менее удобно парсить дочерние элементы можно написать маленькую функцию, что будет возвращать элемент или элементы по заданному условию или условиям

Что за дочерние элементы? Подстроки?
14 июл 19, 00:10    [21926310]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
ferzmikk,


ferzmikk
iMrTidy
Чтобы более или менее удобно парсить дочерние элементы можно написать маленькую функцию, что будет возвращать элемент или элементы по заданному условию или условиям

Что за дочерние элементы? Подстроки?


Опять же, почитайте документацию на тему HTML и XML, да и CSS не навредит. Посвятите этому всему 1 полный день. А потом поговорим.
14 июл 19, 17:47    [21926425]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
court
Member

Откуда:
Сообщений: 1806
iMrTidy
Мда, лихо. По-вашему лучше несколько суток тыкаться и просить о помощи, чем почитать документацию, пусть даже в течение дня. Ну, туда Вам и дорога.
Да где ж я против "чтения документации" ? :)
Исключительно "за" ! :))
Только я за ту "документацию", которая "по теме".
Вот, например, какое отношение к парсингу имеет "HyperText Transfer Protocol" ? тем более Secure ? :)
По моему - никакого. Если бы ТС парсил не сайт в интернете, а сохраненные файлы "*.html" его вопрос никак бы не изменился ...
iMrTidy
А че не сторонний апп сразу? Человеку ж просто нужно несчастную страничку распарсить. На XPath свет клином не сошелся.
А эту претензию вообще не совсем понимаю ...
Форум по Ораклу Оффису, ТС делает в Экселе, - я ему предлагаю и парсить в Экселе ... что не так ?

Или речь про ХМЛ ?
Так ХМЛ - стандарт ! Причем, кроссплатформенный стандарт. Как HTML, к единству с которым, ХМЛ и "призывает" HTML5 :)
А в рамках стандарта ХМЛ есть стандарт доступа к данным - XPath ...
... при чём здесь "сторонний апп" ... ?
14 июл 19, 17:58    [21926427]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
court
iMrTidy
Мда, лихо. По-вашему лучше несколько суток тыкаться и просить о помощи, чем почитать документацию, пусть даже в течение дня. Ну, туда Вам и дорога.
Да где ж я против "чтения документации" ? :)
Исключительно "за" ! :))
Только я за ту "документацию", которая "по теме".
Вот, например, какое отношение к парсингу имеет "HyperText Transfer Protocol" ? тем более Secure ? :)
По моему - никакого. Если бы ТС парсил не сайт в интернете, а сохраненные файлы "*.html" его вопрос никак бы не изменился ...
iMrTidy
А че не сторонний апп сразу? Человеку ж просто нужно несчастную страничку распарсить. На XPath свет клином не сошелся.
А эту претензию вообще не совсем понимаю ...
Форум по Ораклу Оффису, ТС делает в Экселе, - я ему предлагаю и парсить в Экселе ... что не так ?

Или речь про ХМЛ ?
Так ХМЛ - стандарт ! Причем, кроссплатформенный стандарт. Как HTML, к единству с которым, ХМЛ и "призывает" HTML5 :)
А в рамках стандарта ХМЛ есть стандарт доступа к данным - XPath ...
... при чём здесь "сторонний апп" ... ?


Не заметно, чтобы Вы были ЗА документацию.

http(s) при том, что человек задействует библиотеки, которые, к примеру, используют GET, и наверняка понятия не имеет что этот GET значит. Я же не пишу, что нужно стать экспертом по HTTP(S). Кстати, TCP/IP, который Вы почему-то упомянули, к делу прямого отношения не имеет, см. OSI. Хотя, я считаю, уважающий себя программист должен иметь небольшое представление о всех семи уровнях.

Все прекрасно делается без сторонних приложений. Завтра он перетащит проект из Excel в Word или Access, а парсить html так и не научится.
14 июл 19, 19:47    [21926438]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
iMrTidy
Судя по вопросам, Вам для начала стоит подтянуть знания про HTML и протокол HTTP(S). И даже, возможно, написать Hello World веб-страничку.

iMrTidy
Опять же, почитайте документацию на тему HTML и XML, да и CSS не навредит. Посвятите этому всему 1 полный день. А потом поговорим.

+ Начал изучать. Написал такую простую страницу с таблицей. Пока без использования стилей

<html><head><title>Тестовая страница</title></head>
<body>
<H1>Статистика</H1>
<H2>Таблица 1</H1>
Период: 01.01.2019-30.06.2019<br>
<br>

<table>
  <tbody>
    <tr>
      <th>Колонка 1</th>
      <th>Строка 1 Колонка 2<br>Строка 2 Колонка 2</th>
      <th>Колонка 3</th>
      <th>Колонка 4</th>
      <th>Колонка 5</th>
    </tr>
    <tr>
      <td>Значение 1.1</td>
      <td>
       <a href="?numberId=00001">Значение 1_1.2</a>
       <br><br>
       <a href="?numberId=00001&lotId=00001">Значение 1_2.2</a>
      </td>
      <td>Значение 1.3</td>
      <td>Значение 1.4</td>
      <td>Значение 1.5</td>
    </tr>
    <tr>
      <td>Значение 2.1</td>
      <td>
        <a href="?numberId=00001">Значение 2_1.2</a>
        <br><br>
        <a href="?numberId=00001&lotId=00002">Значение 2_2.2</a></td>     
      <td>Значение 2.3</td>
      <td>Значение 2.4</td>
      <td>Значение 2.5<td>
    </tr>
</table>

<span><span>1</span></span>
  <a href="/aaaaa/?page=2">2</a>
  <a href="/aaaaa/?page=3">3</a>
  <a href="/aaaaa/?page=4">4</a>
  <a href="/aaaaa/?page=5">5</a>
  <a href="/aaaaa/?page=6">6</a>
  <a href="/aaaaa/?page=7">7</a>
  <a href="/aaaaa/?page=8">8</a>
  <a href="/aaaaa/?page=9">9</a>
  <a href="/aaaaa/?page=10">10</a>
<span>...</span> <a href="/aaaaa/?page=10000">10000</a>

</body>
</html>


К сообщению приложен файл. Размер - 20Kb
15 июл 19, 13:18    [21926734]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
ferzmikk
1. Пока не понятно как узнать в таблице сколько всего страниц. Как это в коде должно выглядеть?

2. В таблице в одной колонке есть перенос строк, то есть несколько подстрок. У этих значений есть ссылки. Как в коде прописать так, чтобы выгрузить эти значения как массив и ссылки к нему?
15 июл 19, 18:27    [21927012]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
ferzmikk,

Браво! Это очень похвально. Теперь давайте возьмем один вопрос и разберемся с ним.

"...как узнать в таблице сколько всего страниц..." - постановка вопроса, к сожалению, неверная. В HTML таблица не делиться на страницы. Ваши "страницы" это ссылки на веб-странички, в которых, по-видимому, содержится продолжение таблицы. В примере выше 10 000 нужно вытаскивать из элемента <a> - anchor element.

Если взять пример, что я приводил, и заменить в нем документ на Ваш, то можно воспользоваться селектором:
Option Explicit

Sub Test()

Dim xmlHttpReq As MSXML2.XMLHTTP60
Dim doc As MSHTML.HTMLDocument
Dim elems As MSHTML.IHTMLDOMChildrenCollection
Dim elem As MSHTML.IHTMLElement
Dim i As Integer

Set xmlHttpReq = New MSXML2.XMLHTTP60

xmlHttpReq.Open "GET", "file:///D:/Test/test.html", False
xmlHttpReq.send

Set doc = New MSHTML.HTMLDocument
doc.body.innerHTML = xmlHttpReq.responseText
Set elems = doc.querySelectorAll("body > a")
Set elem = elems(elems.Length - 1)
Debug.Print elem.innerText

End Sub


Для Вашего реального случая, скорее всего, можно будет обойтись одним css selector, поэтому почитайте, что это такое и как с этим работать. И после этого продолжим.
16 июл 19, 02:04    [21927171]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
iMrTidy,

Возникает ошибка. Почему у объекта elem значение Nothing?

К сообщению приложен файл. Размер - 59Kb
16 июл 19, 09:44    [21927263]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Если в окне Locals в объекте elems нажать на плюсик, то программа зависает. Почему так?

К сообщению приложен файл. Размер - 68Kb
16 июл 19, 09:48    [21927267]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
ferzmikk,

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

status 0 - в данном случае, нормально.

elem может быть null, если Ваш html отличается от моего.

Нажатие на [+] приводит к крашу, т.к. это такой баг такая фича типа данных, ничего с этим не поделаешь.

Вы про селекторы почитали?
17 июл 19, 00:30    [21928137]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Провожу эксперимент
+Есть простой HTML код
<html><head><title>Тестовая страница</title></head>
<body>
<H1>Статистика</H1>
<H2>Таблица 1</H1>
Период: 01.01.2019-30.06.2019<br>
<br>

<table>
  
    <tr>
      <th>Колонка 1</th>
      <th>Строка 1 Колонка 2<br>Строка 2 Колонка 2</th>
      <th>Колонка 3</th>
      <th>Колонка 4</th>
      <th>Колонка 5</th>
    </tr>
    <tr>
      <td>Значение 1.1</td>
      <td>
       <a href="?numberId=00001">Значение 1_1.2</a>
       <br><br>
       <a href="?numberId=00001&lotId=00001">Значение 1_2.2</a>
      </td>
      <td>Значение 1.3</td>
      <td>Значение 1.4</td>
      <td>Значение 1.5</td>
    </tr>
    <tr>
      <td>Значение 2.1</td>
      <td>
        <a href="?numberId=00001">Значение 2_1.2</a>
        <br><br>
        <a href="?numberId=00001&lotId=00002">Значение 2_2.2</a></td>     
      <td>Значение 2.3</td>
      <td>Значение 2.4</td>
      <td>Значение 2.5<td>
    </tr>
   
</table>

<span><span>1</span></span>
  <a href="/aaaaa/?page=2">2</a>
  <a href="/aaaaa/?page=3">3</a>
  <a href="/aaaaa/?page=4">4</a>
  <a href="/aaaaa/?page=5">5</a>
  <a href="/aaaaa/?page=6">6</a>
  <a href="/aaaaa/?page=7">7</a>
  <a href="/aaaaa/?page=8">8</a>
  <a href="/aaaaa/?page=9">9</a>
  <a href="/aaaaa/?page=10">10</a>
<span>...</span> <a href="/aaaaa/?page=10000">10000</a>

</body>
</html>
+Есть макрос
Sub Test2()

Dim xmlHttpReq As MSXML2.XMLHTTP60
Dim doc As MSHTML.HTMLDocument
Dim elems1 As MSHTML.IHTMLDOMChildrenCollection, elems2 As MSHTML.IHTMLDOMChildrenCollection, elems3 As MSHTML.IHTMLDOMChildrenCollection

Set xmlHttpReq = New MSXML2.XMLHTTP60

xmlHttpReq.Open "GET", "file:///C:/Users/Acer/Desktop/Сайт/главная страница2.htm", False
xmlHttpReq.send

Set doc = New MSHTML.HTMLDocument
doc.body.innerHTML = xmlHttpReq.responseText
Set elems1 = doc.querySelectorAll("html")
Set elems2 = doc.querySelectorAll("table")
Set elems3 = doc.querySelectorAll("body > a")

End Sub
Почему метод querySelectorAll тег "html" находит, а теги "table" и "body > a" не находит?

К сообщению приложен файл. Размер - 44Kb
17 июл 19, 13:11    [21928500]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
iMrTidy
Вы про селекторы почитали?
Читаю
17 июл 19, 13:12    [21928501]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
ferzmikk,

html у Вас не валидный. Элемент <table> находится внутри незакрытого элемента <H2>.

Хорошей практикой считается использование строчных букв в названиях нодов и атрибутов.
17 июл 19, 14:05    [21928564]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
iMrTidy
html у Вас не валидный. Элемент <table> находится внутри незакрытого элемента <H2>.
Исправил
<h2>Таблица 1</h2>

Результат такой же
17 июл 19, 14:32    [21928602]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5249
обалдеть, ему ещё и валидный html нужен

давно пора завязывать с такими поделками
17 июл 19, 14:49    [21928630]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
Konst_One
Member

Откуда:
Сообщений: 11487
https://jsfiddle.net/f09jwqbu/
17 июл 19, 14:56    [21928647]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
ferzmikk,

html:
+
<html>
<head>
    <title>Тестовая страница</title>
</head>
<body>
    <h1>Статистика</h1>
    <h2>
        Таблица 1</h2>
        Период: 01.01.2019-30.06.2019<br>
        <br>

        <table>

            <tr>
                <th>Колонка 1</th>
                <th>Строка 1 Колонка 2<br>Строка 2 Колонка 2</th>
                <th>Колонка 3</th>
                <th>Колонка 4</th>
                <th>Колонка 5</th>
            </tr>
            <tr>
                <td>Значение 1.1</td>
                <td>
                    <a href="?numberId=00001">Значение 1_1.2</a>
                    <br><br>
                    <a href="?numberId=00001&lotId=00001">Значение 1_2.2</a>
                </td>
                <td>Значение 1.3</td>
                <td>Значение 1.4</td>
                <td>Значение 1.5</td>
            </tr>
            <tr>
                <td>Значение 2.1</td>
                <td>
                    <a href="?numberId=00001">Значение 2_1.2</a>
                    <br><br>
                    <a href="?numberId=00001&lotId=00002">Значение 2_2.2</a>
                </td>
                <td>Значение 2.3</td>
                <td>Значение 2.4</td>
                <td>Значение 2.5
                <td>
            </tr>

        </table>

        <span><span>1</span></span>
        <a href="/aaaaa/?page=2">2</a>
        <a href="/aaaaa/?page=3">3</a>
        <a href="/aaaaa/?page=4">4</a>
        <a href="/aaaaa/?page=5">5</a>
        <a href="/aaaaa/?page=6">6</a>
        <a href="/aaaaa/?page=7">7</a>
        <a href="/aaaaa/?page=8">8</a>
        <a href="/aaaaa/?page=9">9</a>
        <a href="/aaaaa/?page=10">10</a>
        <span>...</span> <a href="/aaaaa/?page=10000">10000</a>

</body>
</html>

VBA:
+
Option Explicit

Sub Test()

Dim xmlHttpReq As MSXML2.XMLHTTP60
Dim doc As MSHTML.HTMLDocument
Dim elems1 As MSHTML.IHTMLDOMChildrenCollection
Dim elems2 As MSHTML.IHTMLDOMChildrenCollection
Dim elems3 As MSHTML.IHTMLDOMChildrenCollection

Set xmlHttpReq = New MSXML2.XMLHTTP60

xmlHttpReq.Open "GET", "file:///C:/Test/HTMLPage1.html", False
xmlHttpReq.send

Set doc = New MSHTML.HTMLDocument
doc.body.innerHTML = xmlHttpReq.responseText
Set elems1 = doc.querySelectorAll("html")
Set elems2 = doc.querySelectorAll("table")
Set elems3 = doc.querySelectorAll("body > a")

Debug.Print elems1.Length
Debug.Print elems2.Length
Debug.Print elems3.Length
Debug.Print elems3(elems3.Length - 1).innerText

End Sub

Результат:

К сообщению приложен файл. Размер - 60Kb
17 июл 19, 15:20    [21928682]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
kealon(Ruslan)
обалдеть, ему ещё и валидный html нужен

давно пора завязывать с такими поделками


Не согласен, если класс будет принимать и html, и балалайку, то нарушается приницип Single Responsibility. Если очень нужно, то IE поправит, или сторонние библиотеки. Но, гарантий, что невалидный html попрвится именно так, как нужно, нет. Поэтому публиковать нужно корректный html изначально.
17 июл 19, 15:24    [21928686]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5249
iMrTidy,

вот у вас ЧУЖОЙ сайт, в браузере он показывается НОРМАЛЬНО
если мне будет нужно со своего сайта достать инфу, я её точно в html передавать не буду

html-парсер должен работать с тем, что есть, и наиболее адекватно
17 июл 19, 17:12    [21928794]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
Внесу немного ясности на счет валидности html.

XMLHTTP60 как класс для работы с http не поправляет результат полученный от сервера, что ожидаемо.
HTMLDocument как класс для работы с html документами поправялет задаваемый ему html до валидного, но гарантий того, что внесенные правки буду именно теми, что ожидаются нет. Такое поведение ожидаемо. В ряде случаев могут потребоваться сторонние библиотеки, или менять ответ с сервера вручную.
IE как приложение, включащее в себя несколько библиотек, делает и то, и другое, и третье, что от него и ожидается.
17 июл 19, 17:19    [21928800]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
kealon(Ruslan)
iMrTidy,

вот у вас ЧУЖОЙ сайт, в браузере он показывается НОРМАЛЬНО
если мне будет нужно со своего сайта достать инфу, я её точно в html передавать не буду

html-парсер должен работать с тем, что есть, и наиболее адекватно


Любой браузер, как и IE имеет встроенный механизм правки html до валидного. Браузеры могут по-разному поправить исходный документ, в зависимости от "тяжести" ошибок.

В свете моего разъяснения, XMLHTTP60, HTMLDocument как и IE не являются html парсерами по своей природе. ТС как раз и пишет парсер, пользуюясь функционалом, упомянутых библиотек.

<h1>bla bla</h2> - явная ошибка, хоть HTMLDocument и правит ее на <h1>bla bla</h1>, это не значит, что html валидный и нужно писать так дальше.
17 июл 19, 17:28    [21928812]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5249
iMrTidy,
естественно никто гарантий не даёт, их и не может быть
IE уже никто серьёзно не поддерживает

Проксировать и подправлять специально для IE - это мазохизм чистой воды.
Если в распространённом браузере всё показывается нормально, значит и парсер не должен ему уступать
17 июл 19, 17:29    [21928814]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5249
iMrTidy
<h1>bla bla</h2> - явная ошибка, хоть HTMLDocument и правит ее на <h1>bla bla</h1>, это не значит, что html валидный и нужно писать так дальше.
значит, не значит ...
что делать то?
Предлагаете письмо написать создателю: "мы тут ваш сайт мониторим, цены с него сдираем, подправь, пожалуйста, вот эту, эту и эту страничку, она у вас с ошибками" ?
17 июл 19, 17:35    [21928818]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5249
такую наглость проявляли на моей памяти только гугл и яндекс, но у них аргументы есть
17 июл 19, 17:40    [21928826]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
kealon(Ruslan)
iMrTidy
<h1>bla bla</h2> - явная ошибка, хоть HTMLDocument и правит ее на <h1>bla bla</h1>, это не значит, что html валидный и нужно писать так дальше.
значит, не значит ...
что делать то?
Предлагаете письмо написать создателю: "мы тут ваш сайт мониторим, цены с него сдираем, подправь, пожалуйста, вот эту, эту и эту страничку, она у вас с ошибками" ?


Если честно, то я уже не понимаю о чем Вы.
17 июл 19, 18:03    [21928843]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Пробовал запустить макрос на другом компьютере - другая ошибка. На строке
xmlHttpReq.send
появляется ошибка "Нельзя вызывать данный метод после вызова метода send".

На другом компьютере установлен Microsoft excel 2013 и Microsoft Excel 365.

Почему так?
17 июл 19, 22:14    [21928938]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5249
iMrTidy
Если честно, то я уже не понимаю о чем Вы.
Хорошо, по-русски: то что вы описываете тут уже 3-ю страницу неюзабельно в современных реалиях. Это просто очень дорого в создании и поддержке. За знания того, как накостылять HTMLDocument , что бы он "допетрил", никто не заплатит.
17 июл 19, 22:16    [21928939]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Пробовал запустить макрос на другом компьютере - другая ошибка. На строке
xmlHttpReq.send
появляется ошибка "Нельзя вызывать данный метод после вызова метода send".

На другом компьютере установлен Microsoft excel 2013 и Microsoft Excel 365.

Почему так?

К сообщению приложен файл. Размер - 107Kb
17 июл 19, 22:17    [21928941]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
iMrTidy
Результат:
Из Вашего сообщения тот же самый html, тот же самый макрос, только путь к файлу другой. Но у меня такой же результат как и ранее.

Почему так?

К сообщению приложен файл. Размер - 100Kb
17 июл 19, 22:30    [21928950]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
ferzmikk
На другом компьютере установлен Microsoft excel 2013 и Microsoft Excel 365.

У меня Microsoft excel 2010
17 июл 19, 22:35    [21928953]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
kealon(Ruslan)
iMrTidy
Если честно, то я уже не понимаю о чем Вы.
Хорошо, по-русски: то что вы описываете тут уже 3-ю страницу неюзабельно в современных реалиях. Это просто очень дорого в создании и поддержке. За знания того, как накостылять HTMLDocument , что бы он "допетрил", никто не заплатит.


С чего это? У меня все прекрасно работает, как невалидный html, так и поправленный. Я же написал по-русски, что HTMLDocument автоматически доводит html до валидного. Что еще Вы от него ожидаете? Чтобы еще и парсил сам по-щучьему веленью?

Я думаю, что все дело в том, что Вы сами никогда не пробовали писать парсер на VBA, а беретесь судить. Возьмите код и попробуйте, а потом расскажете. VBA в принципе дорогое удовольствие в современных реалиях.
17 июл 19, 22:39    [21928957]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
ferzmikk,

Добавьте
Debug.Print doc.doby.innerHTML

Что у Вас там?
17 июл 19, 22:41    [21928958]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
iMrTidy
Добавьте
Debug.Print doc.doby.innerHTML
Что у Вас там?


К сообщению приложен файл. Размер - 37Kb
17 июл 19, 23:14    [21928981]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
ferzmikk,

Да, это я опечатку сделал. Там пусто?
17 июл 19, 23:16    [21928982]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
iMrTidy
Там пусто?


К сообщению приложен файл. Размер - 10Kb
17 июл 19, 23:22    [21928986]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
iMrTidy
Знаки вопроса, скорее всего, потому что у Вам нужно задать кириллицу для программ, которые не поддерживают юникод
Вопрос может быть глупый, но где эта кириллица?

У меня windows 8.1 для одного языка.

К сообщению приложен файл. Размер - 69Kb
17 июл 19, 23:29    [21928990]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
ferzmikk
iMrTidy
Там пусто?


Картинка с другого сайта.


Проверьте, что xmlHttpReq.responseText

Я полагаю, что файл не считывается, возможно, из-за пробелов, возможно, из-за кирилицы.
17 июл 19, 23:34    [21928996]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
ferzmikk
iMrTidy
Знаки вопроса, скорее всего, потому что у Вам нужно задать кириллицу для программ, которые не поддерживают юникод
Вопрос может быть глупый, но где эта кириллица?

У меня windows 8.1 для одного языка.

Картинка с другого сайта.


Да, нужен как раз 'Русский (Россия)'
17 июл 19, 23:35    [21928997]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
iMrTidy
Проверьте, что xmlHttpReq.responseText

Я полагаю, что файл не считывается, возможно, из-за пробелов, возможно, из-за кирилицы.

+immediate
<html><head><title>??????title></head>
<body>

<table>
  
    <tr>
      <th>???1</th>
      <th>?? 1 ???2<br>?? 2 ???2</th>
      <th>???3</th>
      <th>???4</th>
      <th>???5</th>
    </tr>
    <tr>
      <td>??? 1.1</td>
      <td>
       <a href="?numberId=00001">??? 1_1.2</a>
       <br><br>
       <a href="?numberId=00001&lotId=00001">??? 1_2.2</a>
      </td>
      <td>??? 1.3</td>
      <td>??? 1.4</td>
      <td>??? 1.5</td>
    </tr>
    <tr>
      <td>??? 2.1</td>
      <td>
        <a href="?numberId=00001">??? 2_1.2</a>
        <br><br>
        <a href="?numberId=00001&lotId=00002">??? 2_2.2</a></td>     
      <td>??? 2.3</td>
      <td>??? 2.4</td>
      <td>??? 2.5<td>
    </tr>
   
</table>

<span><span>1</span></span>
  <a href="/aaaaa/?page=2">2</a>
  <a href="/aaaaa/?page=3">3</a>
  <a href="/aaaaa/?page=4">4</a>
  <a href="/aaaaa/?page=5">5</a>
  <a href="/aaaaa/?page=6">6</a>
  <a href="/aaaaa/?page=7">7</a>
  <a href="/aaaaa/?page=8">8</a>
  <a href="/aaaaa/?page=9">9</a>
  <a href="/aaaaa/?page=10">10</a>
<span>...</span> <a href="/aaaaa/?page=10000">10000</a>

</body>
</html>
Русский язык по логике не должен влиять, так как теги то на английском.
18 июл 19, 00:00    [21929010]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
iMrTidy
Да, нужен как раз 'Русский (Россия)'
Сейчас как и раньше стоит русский
18 июл 19, 00:01    [21929011]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
ferzmikk
iMrTidy
Проверьте, что xmlHttpReq.responseText

Я полагаю, что файл не считывается, возможно, из-за пробелов, возможно, из-за кирилицы.

+ immediate
<html><head><title>??????title></head>
<body>

<table>
  
    <tr>
      <th>???1</th>
      <th>?? 1 ???2<br>?? 2 ???2</th>
      <th>???3</th>
      <th>???4</th>
      <th>???5</th>
    </tr>
    <tr>
      <td>??? 1.1</td>
      <td>
       <a href="?numberId=00001">??? 1_1.2</a>
       <br><br>
       <a href="?numberId=00001&lotId=00001">??? 1_2.2</a>
      </td>
      <td>??? 1.3</td>
      <td>??? 1.4</td>
      <td>??? 1.5</td>
    </tr>
    <tr>
      <td>??? 2.1</td>
      <td>
        <a href="?numberId=00001">??? 2_1.2</a>
        <br><br>
        <a href="?numberId=00001&lotId=00002">??? 2_2.2</a></td>     
      <td>??? 2.3</td>
      <td>??? 2.4</td>
      <td>??? 2.5<td>
    </tr>
   
</table>

<span><span>1</span></span>
  <a href="/aaaaa/?page=2">2</a>
  <a href="/aaaaa/?page=3">3</a>
  <a href="/aaaaa/?page=4">4</a>
  <a href="/aaaaa/?page=5">5</a>
  <a href="/aaaaa/?page=6">6</a>
  <a href="/aaaaa/?page=7">7</a>
  <a href="/aaaaa/?page=8">8</a>
  <a href="/aaaaa/?page=9">9</a>
  <a href="/aaaaa/?page=10">10</a>
<span>...</span> <a href="/aaaaa/?page=10000">10000</a>

</body>
</html>

Русский язык по логике не должен влиять, так как теги то на английском.


Такой html даже Chrome не открывает! У Вас title не закрыт. Вы же говорили, что тестировали именно тот html, что я выложил?
18 июл 19, 00:47    [21929018]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5249
iMrTidy
kealon(Ruslan)
пропущено...
Хорошо, по-русски: то что вы описываете тут уже 3-ю страницу неюзабельно в современных реалиях. Это просто очень дорого в создании и поддержке. За знания того, как накостылять HTMLDocument , что бы он "допетрил", никто не заплатит.


С чего это? У меня все прекрасно работает, как невалидный html, так и поправленный. Я же написал по-русски, что HTMLDocument автоматически доводит html до валидного. Что еще Вы от него ожидаете? Чтобы еще и парсил сам по-щучьему веленью?

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

не путайте парсер и разбор содержимого, лет 10 назад HTMLDocument был крут конечно, но времена поменялись
18 июл 19, 09:51    [21929122]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
kealon(Ruslan)
iMrTidy
пропущено...


С чего это? У меня все прекрасно работает, как невалидный html, так и поправленный. Я же написал по-русски, что HTMLDocument автоматически доводит html до валидного. Что еще Вы от него ожидаете? Чтобы еще и парсил сам по-щучьему веленью?

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

не путайте парсер и разбор содержимого, лет 10 назад HTMLDocument был крут конечно, но времена поменялись


Давайте конкретно на каких примитивных вещах он споткнется, на которых Google Chrome не споткнется?
18 июл 19, 09:57    [21929127]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
kealon(Ruslan)
не путайте парсер и разбор содержимого, лет 10 назад HTMLDocument был крут конечно, но времена поменялись


Дайте-ка ссылочку, где объясняется что есть что.
18 июл 19, 10:06    [21929138]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
iMrTidy
Такой html даже Chrome не открывает! У Вас title не закрыт.
+Исходник
<html>
<head>
    <title>Тестовая страница</title>
</head>
<body>
    <h1>Статистика</h1>
    <h2>
        Таблица 1</h2>
        Период: 01.01.2019-30.06.2019<br>
        <br>

        <table>

            <tr>
                <th>Колонка 1</th>
                <th>Строка 1 Колонка 2<br>Строка 2 Колонка 2</th>
                <th>Колонка 3</th>
                <th>Колонка 4</th>
                <th>Колонка 5</th>
            </tr>
            <tr>
                <td>Значение 1.1</td>
                <td>
                    <a href="?numberId=00001">Значение 1_1.2</a>
                    <br><br>
                    <a href="?numberId=00001&lotId=00001">Значение 1_2.2</a>
                </td>
                <td>Значение 1.3</td>
                <td>Значение 1.4</td>
                <td>Значение 1.5</td>
            </tr>
            <tr>
                <td>Значение 2.1</td>
                <td>
                    <a href="?numberId=00001">Значение 2_1.2</a>
                    <br><br>
                    <a href="?numberId=00001&lotId=00002">Значение 2_2.2</a>
                </td>
                <td>Значение 2.3</td>
                <td>Значение 2.4</td>
                <td>Значение 2.5
                <td>
            </tr>

        </table>

        <span><span>1</span></span>
        <a href="/aaaaa/?page=2">2</a>
        <a href="/aaaaa/?page=3">3</a>
        <a href="/aaaaa/?page=4">4</a>
        <a href="/aaaaa/?page=5">5</a>
        <a href="/aaaaa/?page=6">6</a>
        <a href="/aaaaa/?page=7">7</a>
        <a href="/aaaaa/?page=8">8</a>
        <a href="/aaaaa/?page=9">9</a>
        <a href="/aaaaa/?page=10">10</a>
        <span>...</span> <a href="/aaaaa/?page=10000">10000</a>

</body>
</html>
+Результат
<html>
<head>
    <title>??????title>
</head>
<body>
    <h1>????h1>
    <h2>
        ???</h2>
        ??: 01.01.2019-30.06.2019<br>
        <br>

        <table>

            <tr>
                <th>???1</th>
                <th>?? 1 ???2<br>?? 2 ???2</th>
                <th>???3</th>
                <th>???4</th>
                <th>???5</th>
            </tr>
            <tr>
                <td>??? 1.1</td>
                <td>
                    <a href="?numberId=00001">??? 1_1.2</a>
                    <br><br>
                    <a href="?numberId=00001&lotId=00001">??? 1_2.2</a>
                </td>
                <td>??? 1.3</td>
                <td>??? 1.4</td>
                <td>??? 1.5</td>
            </tr>
            <tr>
                <td>??? 2.1</td>
                <td>
                    <a href="?numberId=00001">??? 2_1.2</a>
                    <br><br>
                    <a href="?numberId=00001&lotId=00002">??? 2_2.2</a>
                </td>
                <td>??? 2.3</td>
                <td>??? 2.4</td>
                <td>??? 2.5
                <td>
            </tr>

        </table>

        <span><span>1</span></span>
        <a href="/aaaaa/?page=2">2</a>
        <a href="/aaaaa/?page=3">3</a>
        <a href="/aaaaa/?page=4">4</a>
        <a href="/aaaaa/?page=5">5</a>
        <a href="/aaaaa/?page=6">6</a>
        <a href="/aaaaa/?page=7">7</a>
        <a href="/aaaaa/?page=8">8</a>
        <a href="/aaaaa/?page=9">9</a>
        <a href="/aaaaa/?page=10">10</a>
        <span>...</span> <a href="/aaaaa/?page=10000">10000</a>

</body>
</html>
В title пропадают символы </. Даже h1. Почему так?
18 июл 19, 10:22    [21929150]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Если делать так
+Исходник
<html>
<body>
        <table>

            <tr>
                <th>Колонка 1</th>
                <th>Строка 1 Колонка 2<br>Строка 2 Колонка 2</th>
                <th>Колонка 3</th>
                <th>Колонка 4</th>
                <th>Колонка 5</th>
            </tr>
            <tr>
                <td>Значение 1.1</td>
                <td>
                    <a href="?numberId=00001">Значение 1_1.2</a>
                    <br><br>
                    <a href="?numberId=00001&lotId=00001">Значение 1_2.2</a>
                </td>
                <td>Значение 1.3</td>
                <td>Значение 1.4</td>
                <td>Значение 1.5</td>
            </tr>
            <tr>
                <td>Значение 2.1</td>
                <td>
                    <a href="?numberId=00001">Значение 2_1.2</a>
                    <br><br>
                    <a href="?numberId=00001&lotId=00002">Значение 2_2.2</a>
                </td>
                <td>Значение 2.3</td>
                <td>Значение 2.4</td>
                <td>Значение 2.5
                <td>
            </tr>

        </table>

        <span><span>1</span></span>
        <a href="/aaaaa/?page=2">2</a>
        <a href="/aaaaa/?page=3">3</a>
        <a href="/aaaaa/?page=4">4</a>
        <a href="/aaaaa/?page=5">5</a>
        <a href="/aaaaa/?page=6">6</a>
        <a href="/aaaaa/?page=7">7</a>
        <a href="/aaaaa/?page=8">8</a>
        <a href="/aaaaa/?page=9">9</a>
        <a href="/aaaaa/?page=10">10</a>
        <span>...</span> <a href="/aaaaa/?page=10000">10000</a>

</body>
</html>
+Результат
<html>
<body>
        <table>

            <tr>
                <th>???1</th>
                <th>?? 1 ???2<br>?? 2 ???2</th>
                <th>???3</th>
                <th>???4</th>
                <th>???5</th>
            </tr>
            <tr>
                <td>??? 1.1</td>
                <td>
                    <a href="?numberId=00001">??? 1_1.2</a>
                    <br><br>
                    <a href="?numberId=00001&lotId=00001">??? 1_2.2</a>
                </td>
                <td>??? 1.3</td>
                <td>??? 1.4</td>
                <td>??? 1.5</td>
            </tr>
            <tr>
                <td>??? 2.1</td>
                <td>
                    <a href="?numberId=00001">??? 2_1.2</a>
                    <br><br>
                    <a href="?numberId=00001&lotId=00002">??? 2_2.2</a>
                </td>
                <td>??? 2.3</td>
                <td>??? 2.4</td>
                <td>??? 2.5
                <td>
            </tr>

        </table>

        <span><span>1</span></span>
        <a href="/aaaaa/?page=2">2</a>
        <a href="/aaaaa/?page=3">3</a>
        <a href="/aaaaa/?page=4">4</a>
        <a href="/aaaaa/?page=5">5</a>
        <a href="/aaaaa/?page=6">6</a>
        <a href="/aaaaa/?page=7">7</a>
        <a href="/aaaaa/?page=8">8</a>
        <a href="/aaaaa/?page=9">9</a>
        <a href="/aaaaa/?page=10">10</a>
        <span>...</span> <a href="/aaaaa/?page=10000">10000</a>

</body>
</html>


К сообщению приложен файл. Размер - 41Kb
18 июл 19, 10:31    [21929155]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5249
ferzmikk,
responseText перекодирует в соответствии со своим разумением

с 3-й версии добавили responseStream для анализа
18 июл 19, 10:33    [21929158]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
kealon(Ruslan)
iMrTidy
пропущено...


С чего это? У меня все прекрасно работает, как невалидный html, так и поправленный. Я же написал по-русски, что HTMLDocument автоматически доводит html до валидного. Что еще Вы от него ожидаете? Чтобы еще и парсил сам по-щучьему веленью?

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

не путайте парсер и разбор содержимого, лет 10 назад HTMLDocument был крут конечно, но времена поменялись

В данном случае это парсер или разбор содержимого?
18 июл 19, 10:34    [21929159]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5249
iMrTidy,
дело ваше, пользуйтесь если пользуется
я не собираюсь вам доказывать насколько мс отстал
18 июл 19, 10:34    [21929160]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5249
ferzmikk,
если вы пользуете MSXML2.XMLHTTP и его свойство responseText, то он(парсер) и виноват
18 июл 19, 10:37    [21929165]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
kealon(Ruslan)
ferzmikk,
если вы пользуете MSXML2.XMLHTTP и его свойство responseText, то он(парсер) и виноват
Как быть теперь?
18 июл 19, 10:45    [21929170]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
kealon(Ruslan)
ferzmikk,
responseText перекодирует в соответствии со своим разумением
Это можно как то вылечить?
с 3-й версии добавили responseStream для анализа


К сообщению приложен файл. Размер - 69Kb
18 июл 19, 10:49    [21929180]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
kealon(Ruslan)
ferzmikk,
если вы пользуете MSXML2.XMLHTTP и его свойство responseText, то он(парсер) и виноват


Картинка с другого сайта. библиотека для http протокола стала парсером. Круто.
18 июл 19, 10:49    [21929182]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
Konst_One
Member

Откуда:
Сообщений: 11487
ferzmikk,

что лечим? meta tag в заголовке пропиши правильный с кодировкой файла своего
18 июл 19, 10:57    [21929185]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
ferzmikk
iMrTidy
Такой html даже Chrome не открывает! У Вас title не закрыт.
+ Исходник
<html>
<head>
    <title>Тестовая страница</title>
</head>
<body>
    <h1>Статистика</h1>
    <h2>
        Таблица 1</h2>
        Период: 01.01.2019-30.06.2019<br>
        <br>

        <table>

            <tr>
                <th>Колонка 1</th>
                <th>Строка 1 Колонка 2<br>Строка 2 Колонка 2</th>
                <th>Колонка 3</th>
                <th>Колонка 4</th>
                <th>Колонка 5</th>
            </tr>
            <tr>
                <td>Значение 1.1</td>
                <td>
                    <a href="?numberId=00001">Значение 1_1.2</a>
                    <br><br>
                    <a href="?numberId=00001&lotId=00001">Значение 1_2.2</a>
                </td>
                <td>Значение 1.3</td>
                <td>Значение 1.4</td>
                <td>Значение 1.5</td>
            </tr>
            <tr>
                <td>Значение 2.1</td>
                <td>
                    <a href="?numberId=00001">Значение 2_1.2</a>
                    <br><br>
                    <a href="?numberId=00001&lotId=00002">Значение 2_2.2</a>
                </td>
                <td>Значение 2.3</td>
                <td>Значение 2.4</td>
                <td>Значение 2.5
                <td>
            </tr>

        </table>

        <span><span>1</span></span>
        <a href="/aaaaa/?page=2">2</a>
        <a href="/aaaaa/?page=3">3</a>
        <a href="/aaaaa/?page=4">4</a>
        <a href="/aaaaa/?page=5">5</a>
        <a href="/aaaaa/?page=6">6</a>
        <a href="/aaaaa/?page=7">7</a>
        <a href="/aaaaa/?page=8">8</a>
        <a href="/aaaaa/?page=9">9</a>
        <a href="/aaaaa/?page=10">10</a>
        <span>...</span> <a href="/aaaaa/?page=10000">10000</a>

</body>
</html>

+ Результат
<html>
<head>
    <title>??????title>
</head>
<body>
    <h1>????h1>
    <h2>
        ???</h2>
        ??: 01.01.2019-30.06.2019<br>
        <br>

        <table>

            <tr>
                <th>???1</th>
                <th>?? 1 ???2<br>?? 2 ???2</th>
                <th>???3</th>
                <th>???4</th>
                <th>???5</th>
            </tr>
            <tr>
                <td>??? 1.1</td>
                <td>
                    <a href="?numberId=00001">??? 1_1.2</a>
                    <br><br>
                    <a href="?numberId=00001&lotId=00001">??? 1_2.2</a>
                </td>
                <td>??? 1.3</td>
                <td>??? 1.4</td>
                <td>??? 1.5</td>
            </tr>
            <tr>
                <td>??? 2.1</td>
                <td>
                    <a href="?numberId=00001">??? 2_1.2</a>
                    <br><br>
                    <a href="?numberId=00001&lotId=00002">??? 2_2.2</a>
                </td>
                <td>??? 2.3</td>
                <td>??? 2.4</td>
                <td>??? 2.5
                <td>
            </tr>

        </table>

        <span><span>1</span></span>
        <a href="/aaaaa/?page=2">2</a>
        <a href="/aaaaa/?page=3">3</a>
        <a href="/aaaaa/?page=4">4</a>
        <a href="/aaaaa/?page=5">5</a>
        <a href="/aaaaa/?page=6">6</a>
        <a href="/aaaaa/?page=7">7</a>
        <a href="/aaaaa/?page=8">8</a>
        <a href="/aaaaa/?page=9">9</a>
        <a href="/aaaaa/?page=10">10</a>
        <span>...</span> <a href="/aaaaa/?page=10000">10000</a>

</body>
</html>

В title пропадают символы </. Даже h1. Почему так?


Файл сохранен в utf-8?
18 июл 19, 10:57    [21929186]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
kealon(Ruslan)
iMrTidy,
дело ваше, пользуйтесь если пользуется
я не собираюсь вам доказывать насколько мс отстал


Потому что не можете доказать. Что бы Вы сказали Вы тут сейчас делаете? Только честно.
18 июл 19, 10:59    [21929189]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
kealon(Ruslan)
iMrTidy,
дело ваше, пользуйтесь если пользуется
я не собираюсь вам доказывать насколько мс отстал


Чем ТС прикажете пользоваться? Он пишет проект в Excel.
18 июл 19, 11:00    [21929191]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
iMrTidy
kealon(Ruslan)
iMrTidy,
дело ваше, пользуйтесь если пользуется
я не собираюсь вам доказывать насколько мс отстал


Чем ТС прикажете пользоваться? Он пишет проект в Excel.
Если писать в VB.NET, C# или Pyton, то тоже самое будет?
18 июл 19, 11:09    [21929205]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
kealon(Ruslan)
ferzmikk,
responseText перекодирует в соответствии со своим разумением

с 3-й версии добавили responseStream для анализа


Кодировку можно задать...а "разумение" это по умлочанию utf-8 как чуть ли не во всем Интернете. Или МС и тут отстал?
18 июл 19, 11:10    [21929208]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
iMrTidy
Файл сохранен в utf-8?
Как это узнать?
18 июл 19, 11:11    [21929210]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5249
iMrTidy
kealon(Ruslan)
iMrTidy,
дело ваше, пользуйтесь если пользуется
я не собираюсь вам доказывать насколько мс отстал


Чем ТС прикажете пользоваться? Он пишет проект в Excel.
я бы просто написал на чём ни будь вменяемом
и в ексель уже готовое сливал
на крайний случай бы просто написал обёртку с COM-интерфейсом которая будет давать xml, приведённый к адекватному

но мы же явно поиграть хотим
18 июл 19, 11:11    [21929211]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5249
iMrTidy
kealon(Ruslan)
ferzmikk,
если вы пользуете MSXML2.XMLHTTP и его свойство responseText, то он(парсер) и виноват


Картинка с другого сайта. библиотека для http протокола стала парсером. Круто.
парсер нижнего уровня
внезапно ..., да?
18 июл 19, 11:14    [21929217]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Konst_One
meta tag в заголовке пропиши правильный с кодировкой файла своего
Так?
<html>
 <head>
  <title>Тег META</title>
  <meta charset="utf-8">

 </head>
...
18 июл 19, 11:14    [21929220]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
ferzmikk
iMrTidy
Файл сохранен в utf-8?
Как это узнать?


Откройте в Notepad++ и перекодируйте в utf-8, а затем сохраните.
18 июл 19, 11:15    [21929223]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
kealon(Ruslan)
iMrTidy
пропущено...


Чем ТС прикажете пользоваться? Он пишет проект в Excel.
я бы просто написал на чём ни будь вменяемом
и в ексель уже готовое сливал
на крайний случай бы просто написал обёртку с COM-интерфейсом которая будет давать xml, приведённый к адекватному

но мы же явно поиграть хотим


Напишите, ТС уже который день мучается. А я умываю руки.
18 июл 19, 11:16    [21929225]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
kealon(Ruslan)
iMrTidy
пропущено...


Картинка с другого сайта. библиотека для http протокола стала парсером. Круто.
парсер нижнего уровня
внезапно ..., да?


Пруфлинк.
18 июл 19, 11:17    [21929226]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
iMrTidy
Откройте в Notepad++ и перекодируйте в utf-8, а затем сохраните.
Заработало!
18 июл 19, 11:22    [21929235]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Я в обычном блокноте писал HTML. Получается обычный блокнот не задает нужную кодировку.
18 июл 19, 11:23    [21929239]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
ferzmikk,

Блокнот при сохранении

К сообщению приложен файл. Размер - 6Kb
18 июл 19, 11:26    [21929243]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
iMrTidy
Нажатие на [+] приводит к крашу, т.к. это такой баг такая фича типа данных, ничего с этим не поделаешь.
Это из за объекта HTMLDocument?

Каждый раз вводить определенный item объекта в Debug.Print не удобно, даже через цикл. Как же можно смотреть иерархию объекта?

Внизу скриншот. В цикле один элемент. На строке elem появляется ошибка.

К сообщению приложен файл. Размер - 47Kb
18 июл 19, 14:07    [21929441]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
ferzmikk
Внизу скриншот. В цикле один элемент. На строке elem появляется ошибка.
Даже когда шаг на строке Next elem и нажать на Reset, то все равно зависает.

К сообщению приложен файл. Размер - 39Kb
18 июл 19, 14:10    [21929446]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Как можно по другому анализировать содержимое?
18 июл 19, 14:10    [21929447]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
ferzmikk,

Подождите, Вам же kealon(Ruslan) согласился написать все красиво: 21929211.
18 июл 19, 14:12    [21929452]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
iMrTidy
ferzmikk,

Подождите, Вам же kealon(Ruslan) согласился написать все красиво: 21929211.
ОК
18 июл 19, 14:25    [21929465]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Усложняю пример, который приближается к реальному.
+Дополненный HTML-код
<html>
  <head>
    <title>Тестовая страница</title>
  </head>
  <body>
    <h1>Статистика</h1>
    <h2>Таблица 1</h2>
    Период: 01.01.2019-30.06.2019<br>
    <br>
    <table class="list border">
      <tbody>
        <tr>
          <th class="left">Колонка 1</th>
          <th>Строка 1 Колонка 2<br>Строка 2 Колонка 2</th>
          <th>Колонка 3</th>
          <th>Колонка 4</th>
          <th class="right">Колонка 5</th>
        </tr>
        <tr class=" ">
          <td>Значение 1.1</td>
          <td style="text-align: center;">
            <a href="?numberId=00001">Значение 1_1.2</a>
            <br><br>
            <a href="?numberId=00001&lotId=00001">Значение 1_2.2</a></td>
          <td>Значение 1.3</td>
          <td nowrap>Значение 1.4</td>
          <td>Значение 1.5</td>
        </tr>
        <tr class="even ">
          <td>Значение 2.1</td>
          <td style="text-align: center;">
            <a href="?numberId=00001">Значение 2_1.2</a>
            <br><br>
            <a href="?numberId=00001&lotId=00002">Значение 2_2.2</a></td>     
          <td>Значение 2.3</td>
          <td nowrap>Значение 2.4</td>
          <td>Значение 2.5<td>
       </tr>
    </tbody>
  </table>
  
  <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=3">3</a>
      <a href="/aaaaa/?page=4">4</a>
      <a href="/aaaaa/?page=5">5</a>
      <a href="/aaaaa/?page=6">6</a>
      <a href="/aaaaa/?page=7">7</a>
      <a href="/aaaaa/?page=8">8</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>
</body>
</html>
Чтобы зацепиться к строке, где присутствует стиль, то как правильно нужно писать? Учитывая еще есть родительский тег div со стилем.
Set elems = html.querySelectorAll("span class=""dots""")
18 июл 19, 14:45    [21929485]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Потом, когда узнали количество "страниц" для продолжение таблицы, то как правильно выгружать последующие "страницы"?
18 июл 19, 14:47    [21929490]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5249
iMrTidy
ferzmikk,

Подождите, Вам же kealon(Ruslan) согласился написать все красиво: 21929211.
не вижу в этом сообщении никакой оферты, но могу рассмотреть предложения если такие мысли будут
18 июл 19, 15:12    [21929516]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
ferzmikk
Усложняю пример, который приближается к реальному.
+ Дополненный HTML-код
<html>
  <head>
    <title>Тестовая страница</title>
  </head>
  <body>
    <h1>Статистика</h1>
    <h2>Таблица 1</h2>
    Период: 01.01.2019-30.06.2019<br>
    <br>
    <table class="list border">
      <tbody>
        <tr>
          <th class="left">Колонка 1</th>
          <th>Строка 1 Колонка 2<br>Строка 2 Колонка 2</th>
          <th>Колонка 3</th>
          <th>Колонка 4</th>
          <th class="right">Колонка 5</th>
        </tr>
        <tr class=" ">
          <td>Значение 1.1</td>
          <td style="text-align: center;">
            <a href="?numberId=00001">Значение 1_1.2</a>
            <br><br>
            <a href="?numberId=00001&lotId=00001">Значение 1_2.2</a></td>
          <td>Значение 1.3</td>
          <td nowrap>Значение 1.4</td>
          <td>Значение 1.5</td>
        </tr>
        <tr class="even ">
          <td>Значение 2.1</td>
          <td style="text-align: center;">
            <a href="?numberId=00001">Значение 2_1.2</a>
            <br><br>
            <a href="?numberId=00001&lotId=00002">Значение 2_2.2</a></td>     
          <td>Значение 2.3</td>
          <td nowrap>Значение 2.4</td>
          <td>Значение 2.5<td>
       </tr>
    </tbody>
  </table>
  
  <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=3">3</a>
      <a href="/aaaaa/?page=4">4</a>
      <a href="/aaaaa/?page=5">5</a>
      <a href="/aaaaa/?page=6">6</a>
      <a href="/aaaaa/?page=7">7</a>
      <a href="/aaaaa/?page=8">8</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>
</body>
</html>
Чтобы зацепиться к строке, где присутствует стиль, то как правильно нужно писать? Учитывая еще есть родительский тег div со стилем.
Set elems = html.querySelectorAll("span class=""dots""")


ferzmikk
Потом, когда узнали количество "страниц" для продолжение таблицы, то как правильно выгружать последующие "страницы"?
18 июл 19, 17:04    [21929623]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
iMrTidy
Member

Откуда:
Сообщений: 773
kealon(Ruslan)
iMrTidy
ferzmikk,
Подождите, Вам же kealon(Ruslan) согласился написать все красиво: 21929211.
не вижу в этом сообщении никакой оферты, но могу рассмотреть предложения если такие мысли будут

kealon(Ruslan)
а я бы php взял, удобнее гораздо

kealon(Ruslan)
там очень удобный и достаточно надёжный преобразователь html в xml

kealon(Ruslan)
ну а дальше довольно тривиально ищется что нужно

kealon(Ruslan)
давно пора завязывать с такими поделками

kealon(Ruslan)
если мне будет нужно со своего сайта достать инфу, я её точно в html передавать не буду

kealon(Ruslan)
Хорошо, по-русски: то что вы описываете тут уже 3-ю страницу неюзабельно в современных реалиях. Это просто очень дорого в создании и поддержке. За знания того, как накостылять HTMLDocument , что бы он "допетрил", никто не заплатит.

kealon(Ruslan)
плохо доводит
спотыкается на примитивных вещах

kealon(Ruslan)
я не собираюсь вам доказывать насколько мс отстал

kealon(Ruslan)
я бы просто написал на чём ни будь вменяемом
и в ексель уже готовое сливал
на крайний случай бы просто написал обёртку с COM-интерфейсом которая будет давать xml, приведённый к адекватному

но мы же явно поиграть хотим

kealon(Ruslan)
парсер нижнего уровня
внезапно ..., да?


А я считаю, что все это явно указывает, что Вы горите желанием, демонстрируете свои глубокие знания в теме, и даже хотели бы сделать как надо, но, видимо, я мешаю, больше не мешаю, вперед. Только балаболы за свои слова не отвечают. Выбор за Вами.
19 июл 19, 10:35    [21930021]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5249
iMrTidy,

Выбор за ТС - 21929516, если наиграется и решит, что не его это дело, всегда пожалуйста, обсудим.
Ему уже много раз сказали, и не я один, что он выбрал плохой путь. Но можно конечно и безнадёжного поддерживать, если есть желающий оплатить сей процесс.
19 июл 19, 10:58    [21930037]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
В общем, поскольку я не делал сайты и начал парсинги писать, то могу многое чего не знать. Начал изучать HTML и CSS. Не знаю нужно ли изучать JavaScript, но если не ошибаюсь, там могут сидеть данные и фильтр.

Какой то код на VBA уже написан по выгрузке данных из сайта. Осталось немного дописать с учетом
- выгрузить количество страниц не через
Set elems = doc.querySelectorAll("body > a")
Set elem = elems(elems.Length - 1)
Debug.Print elem.innerText
а через использования стиля
  <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>
- выгрузка последующих страниц
- с использованием аутентификации
- с использованием фильтра

kealon(Ruslan)
Ему уже много раз сказали, и не я один, что он выбрал плохой путь.
Тогда если это действительно плохой путь, то хотелось бы понять чем конкретно плох. Все таки задачи разные бывают по парсингу, сайты разные, как говорите валидные/не валидные. Тогда скажите конкретно как делать правильно? Использовать другой объект? У VBA ограничения есть? Писать не на VBA, а на VB.Net, С# или на Pyton? На этих языках программирования также будет не надежно? Пожалуйста, порекомендуйте конкретную путевую литературу, где об парсинге пишут достаточно подробно и понятно с учетом разных логических нюансов, исходя данной задачи. Или ссылки на сайты, где по Вашему мнению правильно описывается как делать.
19 июл 19, 12:07    [21930109]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
Konst_One
Member

Откуда:
Сообщений: 11487
curl тебе в помощь

https://levashove.ru/how-to-install-curl-on-windows-10/
19 июл 19, 12:27    [21930138]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Konst_One
curl тебе в помощь

https://levashove.ru/how-to-install-curl-on-windows-10/
Я правильно понимаю, что пишется на php?
19 июл 19, 12:50    [21930155]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
Konst_One
Member

Откуда:
Сообщений: 11487
нет, это утилита командной строки для отправки запросов по http
19 июл 19, 13:07    [21930175]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Konst_One
нет, это утилита командной строки для отправки запросов по http
Его каждый раз вручную надо запускать?
19 июл 19, 13:19    [21930196]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
Konst_One
Member

Откуда:
Сообщений: 11487
можешь автоматизировать , написать батник, например
19 июл 19, 13:28    [21930206]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Konst_One
можешь автоматизировать , написать батник, например
Тогда тут без VBA. Это пишется на VBScript? А тот but может результат в excel выложить как умную таблицу?
19 июл 19, 13:35    [21930213]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
court
Member

Откуда:
Сообщений: 1806
Konst_One
curl тебе в помощь
честно говоря, не понимаю, чем это поможет ТС-у ?

Ну будет он получать html-код страницы не с помощью COM-объекта XMLHTTP, а с помощью curl-а, - и что дальше ?
У него нет проблемы с получением html-кода, у него проблема с тем как распарсить этот полученный код, особенно в случае если код "кривоватый" ...
19 июл 19, 13:39    [21930218]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
court
У него нет проблемы с получением html-кода, у него проблема с тем как распарсить этот полученный код, особенно в случае если код "кривоватый" ...
Если Вы про HTML-код из файла, то это пока условный пример для экспериментирования выгрузки данные из сайта, чтобы потом выгружать из реального примера.
19 июл 19, 13:44    [21930223]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
court
Member

Откуда:
Сообщений: 1806
ferzmikk
court
У него нет проблемы с получением html-кода, у него проблема с тем как распарсить этот полученный код, особенно в случае если код "кривоватый" ...
Если Вы про HTML-код из файла, то это пока условный пример для экспериментирования выгрузки данные из сайта, чтобы потом выгружать из реального примера.
Нет-нет, я в принципе, про любой сайт.
19 июл 19, 13:45    [21930224]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
Konst_One
Member

Откуда:
Сообщений: 11487
с такими знаниями никакой динамический парсер не напишешь, так что ТСу придётся делать что-то кривенькое и с ограниченными возможностями
19 июл 19, 13:46    [21930227]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Konst_One
с такими знаниями никакой динамический парсер не напишешь, так что ТСу придётся делать что-то кривенькое и с ограниченными возможностями
Раз пошла такая тема, то может есть смысл расписать здесь плюсы и минусы каждого способа из имеющего набора. Пусть даже есть способ, как Вы говорите, кривенькое и с ограниченными возможностями, но заданую задачу может реализовать нормально. У сайта задана своя структура. Если в какой момент времени в таблицу добавилась колонка, переместилась или удалилась, то это можно поправить код VBA. Или прописать так в коде VBA, чтобы сам это улавливал.
19 июл 19, 13:56    [21930238]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
Konst_One
Member

Откуда:
Сообщений: 11487
1. есть уже готовые универсальные парсеры сайтов, ищите.
2. если хотите сами, но не понимаете как это всё работает, то стоит начать с изучения основ html
3. если основы осилили, попробуйте работать для начала с интерактивом посредством встроенного браузера (компонент интернет эксплорера), который вы можете поместить внутрь своей формы и реагировать на события DOM (ищите примеры, это делали много раз уже до вас)
19 июл 19, 14:00    [21930242]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Konst_One
1. есть уже готовые универсальные парсеры сайтов, ищите.
На VBA? Надстройка для Excel?
2. если хотите сами, но не понимаете как это всё работает, то стоит начать с изучения основ html
JavaScript надо изучать?
3. если основы осилили, попробуйте работать для начала с интерактивом посредством встроенного браузера (компонент интернет эксплорера), который вы можете поместить внутрь своей формы и реагировать на события DOM (ищите примеры, это делали много раз уже до вас)
Я правильно понимаю, в excel используется объект как встроенный браузер и в зависимости куда захожу - VBA выгружает данные? Это используется совместно с JavaScript?
19 июл 19, 14:10    [21930254]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
Konst_One
Member

Откуда:
Сообщений: 11487
It was enough to add a reference to Microsoft Internet Controls (ieframe.dll), then use the following code in a form:

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
19 июл 19, 14:26    [21930267]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Konst_One,

К сообщению приложен файл. Размер - 136Kb
19 июл 19, 14:48    [21930293]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
Konst_One
Member

Откуда:
Сообщений: 11487
да уж, всё хуже, чем я думал. он в рантайме добавляется, а вы в дизайнтайме
19 июл 19, 14:53    [21930300]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
court
Member

Откуда:
Сообщений: 1806
ferzmikk
Konst_One,

Картинка с другого сайта.

правой педалью по Tollbox, в контекстном меню выбираешь "Additional Controls"
И там это :

К сообщению приложен файл. Размер - 52Kb
19 июл 19, 14:56    [21930305]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Я правильно понимаю, что парсить надо с объекта pDisp.document?

К сообщению приложен файл. Размер - 41Kb
19 июл 19, 15:25    [21930360]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
Konst_One
Member

Откуда:
Сообщений: 11487
ничего там не надо парсить, это полное дерево DOM всех элементов документа
19 июл 19, 15:35    [21930380]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
  <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

К сообщению приложен файл. Размер - 36Kb
19 июл 19, 16:20    [21930457]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
Konst_One
Member

Откуда:
Сообщений: 11487
Dim htmlDoc As MSHTML.HTMLDocument 'Microsoft HTML Object Library

Set htmlDoc = pDisp.document
'теперь можно работать с документом
19 июл 19, 16:30    [21930473]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Вышел на класс pagination, а на context не выходит.

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

В окне watсhes видно, что
- объект htmlDoc.getElementsByClassName("pagination") имеет возвращаемый тип DispHTMLElementCollection
- объект htmlDoc.getElementsByClassName("pagination")(0) имеет возвращаемый тип HTMLDivElement.

К сообщению приложен файл. Размер - 38Kb
19 июл 19, 17:04    [21930517]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
Konst_One
Member

Откуда:
Сообщений: 11487
делай присвоение к переменным нужного типа (коллекциям, элементу и тп), а уже потом работай с этой переменной дальше
19 июл 19, 17:06    [21930521]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Konst_One
делай присвоение к переменным нужного типа (коллекциям, элементу и тп), а уже потом работай с этой переменной дальше
Почему в объект htmlDoc2_1 не присваивается? Хотя тип данных соответствующий.

К сообщению приложен файл. Размер - 34Kb
19 июл 19, 17:40    [21930576]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
Konst_One
Member

Откуда:
Сообщений: 11487
IHTMLElementCollection
19 июл 19, 17:47    [21930583]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
+Фрагмент HTML-кода
<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.

К сообщению приложен файл. Размер - 33Kb
19 июл 19, 18:00    [21930599]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
Konst_One
Member

Откуда:
Сообщений: 11487
почитай уж документацию что ли, коллекция всех элементов A в документе
19 июл 19, 18:03    [21930606]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Тупанул тут я. В каждой строке присвоения написал htmlDoc.
19 июл 19, 18:20    [21930631]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Как видим из объекта htmlDoc2, который имеет тип IHTMLElementCollection нельзя использовать как объект HTMLElementCollection, чтобы использовать метод getElementsByClassName("context"). Я правильно понимаю тип IHTMLElementCollection никак нельзя преобразовать в тип HTMLElementCollection?

К сообщению приложен файл. Размер - 42Kb
19 июл 19, 19:09    [21930677]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Написал код, определяющий количество "страничек". Но как то не красиво получается. Да еще в объект htmlDoc4 не присваивается. Как можно было написать правильнее?
+
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"


К сообщению приложен файл. Размер - 48Kb
19 июл 19, 19:31    [21930687]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Идея заключается в том, что:
На первом этапе из всего документа вытащить коллекцию класса pagination,
На втором этапе из полученной коллекции на первом этапе вытащить (.item(0)) коллекция класса context
На третьем этапе из полученной коллекции на втором этапе вытащить (.item(0)) коллекцию тега а
На четвертом этапе из полученной коллекции на третьем этапе вытащить (.item(последний item)) количество "страничек"

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

Скажите, так получится сделать? Или тут надо по другому делать?
20 июл 19, 02:28    [21930795]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Я правильно понимаю, что возможно сделать по следующей схеме?
HTMLDocument → IHTMLElementCollection → IHTMLElement → [n1][m1]Children → [n2][m2]Children → [n3][m3]Children → и т.д.
20 июл 19, 02:38    [21930796]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
ferzmikk
Написал код, определяющий количество "страничек". Но как то не красиво получается. Да еще в объект htmlDoc4 не присваивается. Как можно было написать правильнее?
22 июл 19, 12:21    [21931618]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
court
Member

Откуда:
Сообщений: 1806
ferzmikk
ferzmikk
Написал код, определяющий количество "страничек". Но как то не красиво получается. Да еще в объект htmlDoc4 не присваивается. Как можно было написать правильнее?
Это всё лишние "телодвижения" :)

XMLHTTP - тебе ошибкой скажет, что запрошена несуществующая страница
Если парсишь через IE, WebBrowser - то сигнатура полученной страницы будет не соответствовать "нормальной" странице, и это как условие выхода можно использовать ...
22 июл 19, 12:43    [21931650]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
court
XMLHTTP - тебе ошибкой скажет, что запрошена несуществующая страница
Подключаешься же к запрашиваемой странице. Или это другое?
Если парсишь через IE, WebBrowser - то сигнатура полученной страницы будет не соответствовать "нормальной" странице, и это как условие выхода можно использовать ...
Как быть теперь?
22 июл 19, 12:50    [21931657]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
court
Member

Откуда:
Сообщений: 1806
ferzmikk
court
XMLHTTP - тебе ошибкой скажет, что запрошена несуществующая страница
Подключаешься же к запрашиваемой странице. Или это другое?
Твой УРЛ страниц ведь типа этого
http://ааааа.ru/bbbbb/?page=2

Вот и "крути" безконечный цикл с нарастающим номером страницы, подставляя его в шаблон УРЛ-а (вместо 2).
Как получишь ошибку "Не удается найти указанный ресурс." - выход из цикла
22 июл 19, 13:00    [21931667]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
court
ferzmikk
пропущено...
Это всё лишние "телодвижения" :)
Как правильно и оптимально писать, чтобы выгрузить количество "страничек"?
22 июл 19, 13:07    [21931677]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
court
Вот и "крути" безконечный цикл с нарастающим номером страницы, подставляя его в шаблон УРЛ-а (вместо 2).
Как получишь ошибку "Не удается найти указанный ресурс." - выход из цикла
Как вариант. Но хочу разобраться, как можно вытащить через открывающие вложенные тэги.
22 июл 19, 13:28    [21931702]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
+Вариант 1
Option Explicit
Private WithEvents WB As WebBrowser

Private Sub UserForm_Activate()
  Set WB = Me.Controls.Add("Shell.Explorer.2")
  WB.Navigate "file:///C:/Users/Acer/Desktop/Сайт/Главная страница.htm"
End Sub

Private Sub WB_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
    Dim htmlDoc As MSHTML.HTMLDocument
    Set htmlDoc = pDisp.Document    
    ...
End Sub
+Вариант 2
Option Explicit

Sub Procedure_1()

Dim cantrol As Control
Dim Broser As Object
 
Set cantrol = UserForm2.Controls.Add("Shell.Explorer.2", "WebBroser")
Set Broser = cantrol.Object

cantrol.Navigate "file:///C:/Users/Acer/Desktop/Сайт/Главная страница.htm"

...

UserForm2.Controls.Remove "WebBroser"
End Sub
А если писать код не внутри пользовательской формы, а в отдельной модуле как через динамическое создание контрола. Так получится? Ведь объект pDisp получаем через событийную процедуру WB_NavigateComplete2.
22 июл 19, 14:03    [21931729]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Я правильно понимаю, что вариант 2 не получится?
23 июл 19, 14:28    [21932701]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Выгружаю таблицу из тестового сайта, который похож на реальный сайт. В результате - таблица выгружается.

К сообщению приложен файл. Размер - 66Kb
26 июл 19, 10:15    [21935060]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Выгружаю таблицу из реального сайта. В результате - таблица не выгружается.

К сообщению приложен файл. Размер - 63Kb
26 июл 19, 10:16    [21935064]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Почему так? На что нужно обратить внимание?

+Фрагмент кода из реального сайта
<div class="results-frame"> 
  <table class="list border">
      <tbody>
        <tr>
         ...
        </tr>
        <tr class=" ">
          ...
        </tr>
        <tr class="even ">
          ...
       </tr>
       <tr class=" ">
          ...
       </tr>      
    </tbody>
  </table>
</div>
26 июл 19, 10:18    [21935066]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
Konst_One
Member

Откуда:
Сообщений: 11487
см. свой htmlDoc2, вы неправильный тип переменной указали
26 июл 19, 10:44    [21935113]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Konst_One
см. свой htmlDoc2, вы неправильный тип переменной указали

Акцент пока на переменную htmlDoc

В окне Watches
htmlDoc.getElementsByTagName("table")
таблица не выгружается
26 июл 19, 10:51    [21935126]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
Konst_One
Member

Откуда:
Сообщений: 11487
скорее всего ваш документ ещё нге загрузился, там пустая страница about:blank . нужно дождаться загрузки
26 июл 19, 11:00    [21935143]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Konst_One
скорее всего ваш документ ещё нге загрузился, там пустая страница about:blank . нужно дождаться загрузки
Все также
26 июл 19, 11:14    [21935158]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
Konst_One
Member

Откуда:
Сообщений: 11487
пробуйте дальше, начните с простых html и посмотрите примеры использования контрола WebBrowser в интернете
26 июл 19, 11:29    [21935184]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Konst_One
см. свой htmlDoc2, вы неправильный тип переменной указали
Надо MSHTML.IHTMLElementCollection?
26 июл 19, 14:18    [21935392]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Беру другие сайты. То же самое.

+
Option Explicit
Private WithEvents WB As WebBrowser

Private Sub UserForm_Activate()
    Set WB = Me.Controls.Add("Shell.Explorer.2")
    'WB.Navigate "view-source:https://www.vestidos.ru/pages/size_table.php"
    WB.Navigate "http://www.segment.ru/analytics/obzor_otrasli_ryinok_kantselyarskih_tovarov_i_ofisnoy_bumagi_istochnik_rbk/"
End Sub

Private Sub WB_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
    Dim htmlDoc As MSHTML.HTMLDocument
    Set htmlDoc = pDisp.Document
    
    Dim htmlDoc2 As MSHTML.IHTMLElementCollection
    Set htmlDoc2 = htmlDoc.getElementsByTagName("table")
End Sub


К сообщению приложен файл. Размер - 51Kb
26 июл 19, 14:20    [21935395]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
ferzmikk
Беру другие сайты. То же самое.
Почему так?
26 июл 19, 17:46    [21935648]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
Вот даже если выгружать с текущего сайта, то не находит таблицу. Тег html находит, а тег table не находит. Почему?

К сообщению приложен файл. Размер - 50Kb
19 авг 19, 22:08    [21952947]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
И вот еще. Чтобы выгрузить с использованием фильтра - надо вставить параметры и нажать на кнопку. С помощью getElementById получается программно ввести ключевое слово "Парсинг" в поле "Поиск", а также ввести значение "Microsoft Office" в поле "Форум". У кнопки нету ID, поэтому надо выйти на div c ID "content-wrapper-forum", а дальше через Child выйти на кнопку.

1. Вышел на кнопку. Работает клик.
HTMLDoc.getElementById("content-wrapper-forum").Children(0).Children(0).Children(1).Children(0).Children(2)
Скажите, учитывая, что у кнопки нету ID, возможно ли было написать строку по короче?

2. Не работает клик (выбор) опции "Microsoft Office"
Set HTMLInput_Forum = HTMLDoc.getElementById("ComboForums")(52)
HTMLInput_Forum.Click
Как правильно написать?

3. Возможно ли было выйти на опцию "Microsoft Office" не указывая индекс, а использовать, скажем, поисковый метод, где указывается "Microsoft Office" и выводит на нужную опцию?

+
Option Explicit
Sub GetHTMLDocument2()

Dim IE As New SHDocVw.InternetExplorer
Dim HTMLDoc As MSHTML.HTMLDocument
Dim HTMLInput_keyword, HTMLInput_Forum As MSHTML.IHTMLElement
Dim HTMLButton As MSHTML.IHTMLElement

IE.Visible = True
IE.Navigate "https://www.sql.ru/forum/afsearch.aspx?s=&submit=%CD%E0%E9%F2%E8&bid=-3"

Do While IE.ReadyState <> READYSTATE_COMPLETE
Loop

Set HTMLDoc = IE.Document

Set HTMLInput_keyword = HTMLDoc.getElementById("searchQuery")
HTMLInput_keyword.Value = "Парсинг"

Set HTMLInput_Forum = HTMLDoc.getElementById("ComboForums")(52)
'HTMLInput_Forum.Value = "Microsoft Office"
HTMLInput_Forum.Click

Set HTMLButton = HTMLDoc.getElementById("content-wrapper-forum").Children(0).Children(0).Children(1).Children(0).Children(2)
HTMLButton.Click

End Sub


К сообщению приложен файл. Размер - 146Kb
21 авг 19, 12:43    [21954279]     Ответить | Цитировать Сообщить модератору
 Re: VBA и WEB  [new]
ferzmikk
Member

Откуда:
Сообщений: 1906
ferzmikk
2. Не работает клик (выбор) опции "Microsoft Office"
Set HTMLInput_Forum = HTMLDoc.getElementById("ComboForums")(52)
HTMLInput_Forum.Click
Как правильно написать?
HTMLDoc.getElementById("ComboForums").selectedIndex = 52
23 авг 19, 15:19    [21956547]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3 4 5 6 7      [все]
Все форумы / Microsoft Office Ответить