1

Тема: AHK: Получение данных с html страницы в переменные в реальном времени.

Приветствую всех.
Около недели пытался разобраться сам. Почитал про самые основы html, просмотрел темы форума, но с наскока сделать не получилось.

На локальной html странице обновляется (примерно три раза в секунду) текст вида "clock_sec=10".

<li id="ind-bank" style="">bank=0.014672</li>
<li id="ind-clock_hour" style="">clock_hour=3.233333</li>
<li id="ind-clock_min" style="">clock_min=14</li>
<li class="" id="ind-clock_sec" style="">clock_sec=40</li>
<li id="ind-turn2" style="display: list-item;"></li>

Нужно чтобы в переменные постоянно передавались обновляемые числа. С частотой больше трех в секунду и минимальной задержкой.
Возможно ли это? И что еще нужно для разбора задачи?

2

Re: AHK: Получение данных с html страницы в переменные в реальном времени.

text=
(
<li id="ind-bank" style="">bank=0.014672</li>
<li id="ind-clock_hour" style="">clock_hour=3.233333</li>
<li id="ind-clock_min" style="">clock_min=14</li>
<li class="" id="ind-clock_sec" style="">clock_sec=40</li>
<li id="ind-turn2" style="display: list-item;"></li>
)
RegexMatch(text, "clock_sec=(.*?)</li>", match)
msgbox % match1

3

Re: AHK: Получение данных с html страницы в переменные в реальном времени.

Прошу прощения. В который раз уже забыл про самое главное то написать.
Проблема в получении текста со страницы. Часть выше я взял из проводника DOM в IE.
На скрипт что когда-то предлагали вам, вылезла ошибка.
Скрипт.

+ открыть спойлер

;Константы используемые в WinHttpRequest
global WinHttpRequestOption_EnableRedirects := 6
global WinHttpRequestOption_MaxAutomaticRedirects := 14
global WinHttpRequestOption_EnableHttpsToHttpRedirects := 12

; Создаём объект для запросов по HTTP протоколу
global oHttpRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")

;Включаем автоматические редиректы
oHttpRequest.Option(WinHttpRequestOption_EnableRedirects) := -1
;Включаем автоматические редиректы с HTTP на HTTPS
oHttpRequest.Option(WinHttpRequestOption_EnableHttpsToHttpRedirects) := -1
;Выставляем максимальное количество редиректов
oHttpRequest.Option(WinHttpRequestOption_MaxAutomaticRedirects) := 20

; Загружаем страницу c сайта РБК
oHtmlDoc := documentFromURL("http://www.rbc.ru/")

MsgBox % oHtmlDoc.body.outerText

; Функция загрузки и построения документа с указанного URL
documentFromURL(ByRef sURL) {
    ; Отправляем GET запрос на сервер
    oHttpRequest.open("GET", sURL, false)
    oHttpRequest.send()
    ; Строим из полученных данных документ и возвращаем из функции
    return documentFromHTML(oHttpRequest.responseText, sURL)
}

; Функция создания документа из HTML кода
documentFromHTML(ByRef sHTMLCode, ByRef sBaseURL) {
    ; Создаём объект для парсинга HTML кода
    oDoc := ComObjCreate("htmlfile")
    oDoc.open()
    ; Вставляем базовый тэг чтобы у относительных ссылок была верная адрессация от базового адреса
    oDoc.write("<base href=""" . sBaseURL . """>")
    oDoc.close()
    oDoc.body.innerHTML := sHTMLCode
    return oDoc
}

Ошибка.

Please use a browser with canvas support
Map/primary_objectives
Map/secondary_objectives

Из проводника.

<script src="/loc/map/primary_objectives?fmt=js"></script>
<script src="/loc/map/secondary_objectives?fmt=js"></script>

Я пробовал брать разные скрипты с форума и немного их менять, но это приводило к ошибкам или ничего не возвращало.

4

Re: AHK: Получение данных с html страницы в переменные в реальном времени.

Надо включить сниффер в броузере и посмотреть, какие запросы посылаются и что возвращается.
Скорей всего нужная информация  в каком-нибудь json-массиве.

5

Re: AHK: Получение данных с html страницы в переменные в реальном времени.

Скачал HTTP Analyzer v6. Записал открытие страницы. Экспортировал лог в xml.
Это то, что нужно? Что надо искать?

6

Re: AHK: Получение данных с html страницы в переменные в реальном времени.

В IE если нажать f12, выбрать network, записать отправку запроса на сайт, в поиске вбить нужные данные, посмотреть откуда они берутся.

7

Re: AHK: Получение данных с html страницы в переменные в реальном времени.

Что значит, откуда берутся? Какого вида информацию искать?
Что-то из этого?

URL-адрес	Протокол	Метод	Результат	Тип	Получено	Затрачено	Инициатор	Ожидание	Начало	Запрос	Ответ	Чтение из кэша	Интервал
/map_obj.json	HTTP	GET	200	application/json	472 Б	16 мс	XMLHttpRequest	17753	0	16	0	0	6520

8

Re: AHK: Получение данных с html страницы в переменные в реальном времени.

Так проверьте, то это или не то.

9

Re: AHK: Получение данных с html страницы в переменные в реальном времени.

Простите, но я совсем в этом не разбираюсь.
Не знаю, что именно искать и что проверять.
Что значит "откуда берутся"? Как это выглядит?

10

Re: AHK: Получение данных с html страницы в переменные в реальном времени.

Искать надо нужные вам значения.
А проверять как-нибудь так:

url := "site/map_obj.json"
HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
HTTP.Open("GET", url, true)
HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)")
HTTP.Send()
HTTP.WaitForResponse()
msgbox % HTTP.ResponseText

11 (изменено: NLG, 2016-04-05 01:26:56)

Re: AHK: Получение данных с html страницы в переменные в реальном времени.

Немного подразобрался. Наверное.

Если в url писать просто "http://127.0.0.1:8111/", то получается html код.
При добавлении "/map_obj.json" и других – ничего.

Если правильно понял, то проблема получается в показе текста.
При .outerText получается эта ошибка.
Как это можно решить?

url := "http://127.0.0.1:8111/"
HTTP := ComObjCreate("WinHttp.WinHttpRequest.5.1")
HTTP.Open("GET", url, true)
		;HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)")
HTTP.Send()
HTTP.WaitForResponse() 
msgbox % Http.responseText    ; Работает.


oHtmlDoc := documentFromHTML(Http.responseText, url)
msgbox % oHtmlDoc.body.outerText    ; Выдает ошибку "Please use a browser with canvas support"

; Функция создания документа из HTML кода
documentFromHTML(ByRef sHTMLCode, ByRef sBaseURL) {
    ; Создаём объект для парсинга HTML кода
    oDoc := ComObjCreate("htmlfile")
    oDoc.open()
    oDoc.close()
    oDoc.body.innerhtml := sHTMLCode
    return oDoc
}

12

Re: AHK: Получение данных с html страницы в переменные в реальном времени.

Регекспами.

+ NLG

13

Re: AHK: Получение данных с html страницы в переменные в реальном времени.

Всё.
Заработало.
Затупил. В моем случае достаточно двух адресов и в полученном всё есть.
Спасибо за помощь, без вас бы не смог разобраться.

;url := "http://127.0.0.1:8111/indicators"
url := "http://127.0.0.1:8111/state"
HTTP := ComObjCreate("WinHttp.WinHttpRequest.5.1")
HTTP.Open("GET", url, true)
HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/7.0)")
HTTP.Send()
HTTP.WaitForResponse() 
msgbox % Http.responseText