Автор Тема: [Сеть, интернет] вытащить данные изменяющиеся данные из html  (Прочитано 1237 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Pozitif4ik [?]

  • Новичок
  • *
  • Сообщений: 8
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Добрый день!
в Autoit не силен, поэтому прошу помощи.
Необходимо в переменную записать числовые данные из html страницы.

Отрывок кода:
<text class="pin_text" style="font-family: 'Open Sans regular', 'Open Sans'; font-size: 14px; font-weight: bold; fill: #fff;" text-anchor="start" x="1421.61" y="2" dx="4" dy="3">[color=red]1.41707[/color]</text>
<text class="pin_text" style="font-size: 14px; font-style: normal; font-weight: bold; font-stretch: normal; fill: #333; text-anchor: end;" x="1477.5" y="31" dx="2" dy="-2">00:01</text>

Число 1.41707  и время 00:01 постоянно меняется.
Пытался сделать через регулярные выражения, но не получилось.
Направьте пожалуйста каким путем идти.

« Последнее редактирование: Март 12, 2017, 21:35:10 от Pozitif4ik, Причина: прописать код в тэг »

Русское сообщество AutoIt


Оффлайн Dima1337 [?]

  • Новичок
  • *
  • Сообщений: 141
  • Репутация: 14
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Вот так я получаю уведомление о новом сообщении на форуме:
Код: AutoIt [Выделить]
#include <IE.au3>
#include <Array.au3>

$result = '0'

While 1
    ToolTip('')
    check()
    Sleep(30*1000)
WEnd

Func check()
    $oIE = _IECreate("https://autoit-script.ru/index.php",'',0)
    _IELoadWait($oIE,100)
    $html = _IEDocReadHTML($oIE)

    Do
        Global $oLinks = _IETagNameGetCollection($oIE, 'div')
        Sleep(50)
    Until IsObj($oLinks)

    For $oLink In $oLinks
        If $oLink.getAttribute("class") == "hslice" Then
            $sResult=$oLink.innertext
            $sResult = StringRegExpReplace($sResult,"Русское сообщество AutoIt - Недавние сообщения","")
            $sResult = StringRegExpReplace($sResult,"Добавить веб-фрагмент в браузер","")
            $sResult=StringStripCR($sResult)
            $sResult=StringReplace($sResult, @LF, "+")
            $sResult=StringStripWS($sResult, 1)
            $sResult = StringSplit($sResult,'+')
            $aResult = ''

            If IsString($sResult[5]) And $sResult[5] <> $result Then
                For $i = 5 to $sResult[0]
                    If IsString($sResult[$i]) Then
                        $aResult = $aResult & $sResult[$i] & @CRLF
                    EndIf
                Next

                $result = $sResult[5]
                $i = $sResult[0] - 2
                ToolTip($aResult,0,@DesktopHeight - @DesktopHeight / $i)

                ExitLoop
            EndIf
        EndIf
    Next

    _IEQuit($oIE)
EndFunc



Добавлено: Март 03, 2017, 22:50:39
У вас должно получиться как то так:
(нажмите для показа/скрытия)

Вот вариант загружать html и искать текст в нем:
(нажмите для показа/скрытия)


Добавлено: Март 03, 2017, 23:02:30
Так же ознакомьтесь с этой темой, там есть еще несколько решений:
https://autoit-script.ru/index.php?topic=23500.0

ЗЫ Поместите весь html код в тег: [code][/code]
« Последнее редактирование: Март 04, 2017, 01:56:30 от Dima1337 »

Правильный вопрос - полдела!

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3679
  • Репутация: 934
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Pozitif4ik

ПредупреждениеЗа нарушение правил форума (пункт В.11):
Цитировать
Любые отрывки AutoIt кода необходимо заключать в тег [autoit] (подробнее), а обычный код соответственно в тег [code] (подробнее). Также большие выдержки текста помещайте под тег [spoiler] (подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.


Dima1337  [?]
Цитировать
Так же ознакомьтесь с этой темой
Разные данные при считывание цены со страниц в разных браузерах
Так гораздо симпатичнее, не правда ли?

Скорблю и помню.




Оффлайн Dima1337 [?]

  • Новичок
  • *
  • Сообщений: 141
  • Репутация: 14
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
OffTopic[url=https://...]...[/url]
Спасибо, а то думал как такую ссылку делать  :-[
« Последнее редактирование: Март 04, 2017, 00:56:23 от Dima1337 »

Русское сообщество AutoIt


Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3679
  • Репутация: 934
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
OffTopicDima1337  [?]
Цитировать
а то думал как такую ссылку делать  :-[
Век живи - век учись. В этом ничего постыдного нет. ;)
P.S. Лучше спросить и выглядеть глупым в течении нескольких минут, чем промолчать и оставаться им всю жизнь.

Оффлайн Pozitif4ik [?]

  • Новичок
  • *
  • Сообщений: 8

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Спасибо за направление.
Скрипт работает но немного не так, как бы хотелось.
Как сделать чтобы число и время записывались одновременно в разные элементы массива или в разные переменные?
Пока работает только поочередная запись в 1 переменную или в 1 элемент массива.
Основная цель записывать в разные переменные данные числа при таймере равным 00:00.

(нажмите для показа/скрытия)
« Последнее редактирование: Март 20, 2017, 02:16:08 от Garrett »

Оффлайн Pozitif4ik [?]

  • Новичок
  • *
  • Сообщений: 8

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Вижу выход только в регулярных выражениях, но что то идет не так. Выводит 0, в чем может быть ошибка?
(нажмите для показа/скрытия)
« Последнее редактирование: Март 20, 2017, 20:03:21 от Garrett »

Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2052
  • Репутация: 448
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Pozitif4ik  [?]
Цитировать
Выводит 0, в чем может быть ошибка?
В msgbox нельзя вывести массив

Русское сообщество AutoIt


Оффлайн Pozitif4ik [?]

  • Новичок
  • *
  • Сообщений: 8

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Pozitif4ik  [?]
Цитировать
Выводит 0, в чем может быть ошибка?
В msgbox нельзя вывести массив

Да точно, спасибо.

Составил такой костыль:

Код: AutoIt [Выделить]
$sText=_IEDocReadHTML ($oIE)
$avArray=StringRegExp($sText, '>(\d.\d\d\d\d\d)</text>', 3)
_ArrayDisplay($avArray)
 


но находит 5 элементов, как сформировать регулярку, что бы искалось значение только в строке :
<text class="pin_text" style="font-family: 'Open Sans regular', 'Open Sans'; font-size: 14px; font-weight: bold; fill: #fff;" text-anchor="start" x="1421.61" y="2" dx="4" dy="3">[color=red]1.41707[/color]</text>

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3679
  • Репутация: 934
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Pozitif4ik
Дайте ссылку на сайт с данными.

Оффлайн Pozitif4ik [?]

  • Новичок
  • *
  • Сообщений: 8

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Pozitif4ik
Дайте ссылку на сайт с данными.


https://olymptrade.com

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3679
  • Репутация: 934
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Pozitif4ik
В какой момент появляются нужные данные или что нужно сделать для их появления? Распишите фазы работы скрипта.

Оффлайн Pozitif4ik [?]

  • Новичок
  • *
  • Сообщений: 8

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Pozitif4ik
В какой момент появляются нужные данные или что нужно сделать для их появления? Распишите фазы работы скрипта.

необходимые данные появляются после авторизации.
на скриншоте выделил необходимое значение, вся проблема в том, что значение может меняется каждую секунду. другими словами когда значение таймера = 00:00 значение переменной записывается в переменную и процедура начинается заново.(диапазон таймера 15 сек).
Как я вижу решение задачи:
1. находим регулярным выражением таймер, сравниваем его с "00:00"
2. находим регулярным выражением значение записываем в переменную
3. повторяем действие 1. и 2. (n раз) но переменные для записи должны быть каждый раз разные.


Внимание: Для просмотра прикреплённых файлов необходимо Войти или Зарегистрироваться

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3679
  • Репутация: 934
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Pozitif4ik  [?]
Цитировать
но переменные для записи должны быть каждый раз разные.
То есть, за 15 сек должно получиться 15 пар переменных. Я правильно понимаю?

Оффлайн Pozitif4ik [?]

  • Новичок
  • *
  • Сообщений: 8

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Pozitif4ik  [?]
Цитировать
но переменные для записи должны быть каждый раз разные.
То есть, за 15 сек должно получиться 15 пар переменных. Я правильно понимаю?

за 15 секунд только 1 переменная с необходимым значением числа, при значении таймера = 00:00, затем таймер заново начинает отсчет от 15 и когда таймер второй раз досчитает до 0 (станет равным 00:00) формируется 2 переменная со значением числа. таймер цикличен, отсчет от 15 до 0 и затем снова начинается отсчет от 15.



Русское сообщество AutoIt


 

Похожие темы

  Тема / Автор Ответов Последний ответ
12 Ответов
10415 Просмотров
Последний ответ Декабрь 01, 2012, 02:05:11
от defens
1 Ответов
2825 Просмотров
Последний ответ Декабрь 14, 2010, 11:21:15
от madmasles
18 Ответов
7247 Просмотров
Последний ответ Июль 29, 2011, 18:27:38
от Guezt Gutsy
20 Ответов
12190 Просмотров
Последний ответ Сентябрь 03, 2013, 14:10:17
от alex33
5 Ответов
4308 Просмотров
Последний ответ Март 01, 2012, 12:21:34
от _Lexa98_
2 Ответов
2029 Просмотров
Последний ответ Август 03, 2012, 20:24:52
от Crazy Kvace
4 Ответов
1791 Просмотров
Последний ответ Январь 17, 2013, 05:52:53
от sngr
10 Ответов
3036 Просмотров
Последний ответ Июль 24, 2013, 13:16:03
от MnM
1 Ответов
1335 Просмотров
Последний ответ Июль 17, 2015, 19:38:03
от Velmor
9 Ответов
1868 Просмотров
Последний ответ Январь 06, 2016, 18:11:32
от Kasper