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

Откуда: Нижневартовск
Сообщений: 5580
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

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

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

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

Откуда: Нижневартовск
Сообщений: 5580
такую наглость проявляли на моей памяти только гугл и яндекс, но у них аргументы есть
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

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

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

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

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

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

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

Почему так?

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

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

Почему так?

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

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

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

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


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

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

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

Откуда:
Сообщений: 1990
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]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4 5 6 7   вперед  Ctrl      все
Все форумы / Microsoft Office Ответить