26

Re: AHK: Получить текст с HTML страницы в переменную

lemurr-filter, в первом примере у вас две ошибки использования переменных.

27 (изменено: lemurr-filter, 2017-01-13 18:51:17)

Re: AHK: Получить текст с HTML страницы в переменную

stealzy, здравствуйте!
А как правильно указать переменную для этого  кода, подскажите пожалуйста?

28

Re: AHK: Получить текст с HTML страницы в переменную

А зачем вам именно этот код?
Что вы именно хотите получить?

29 (изменено: lemurr-filter, 2017-01-14 03:09:08)

Re: AHK: Получить текст с HTML страницы в переменную

Malcev, здравствуйте!
Хочу получить текст HTML страницы в переменную (как в теме топика), но только из разных, подставляемых URL.

Cейчас пытаюсь воспользоваться Вашим примером отсюда http://forum.script-coding.com/viewtopi … 74#p101274, но на данном компьютере возникает иная ошибка, Autohotkey говорит:

"Error at line 2.
Line Text: global WinHttpRequestOption_EnableRedirects := 6
Error: This line does not contain a recognized action.
The program will exit".

(((  И с кодом Xameleon'а - на данном компьютере тоже похожая.
Не подскажете в чём может быть дело?
P.S. другие мои скрипты (попроще) работают нормально.

UPD:   Обновил Autohotkey, теперь всё хорошо.
Спасибо всем!

30

Re: AHK: Получить текст с HTML страницы в переменную

Зачем вы 2 поста постоянно поднимаете?

url := "https://ya.ru/"
HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
HTTP.Open("GET", url, true)
HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko)")
HTTP.SetRequestHeader("Pragma", "no-cache")
HTTP.SetRequestHeader("Cache-Control", "no-cache")
HTTP.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")
HTTP.Send()
HTTP.WaitForResponse()
msgbox % HTTP.ResponseText

31 (изменено: lemurr-filter, 2017-01-14 03:07:44)

Re: AHK: Получить текст с HTML страницы в переменную

Malcev Спасибо огромное!

32 (изменено: Странникх, 2017-04-28 00:17:02)

Re: AHK: Получить текст с HTML страницы в переменную

Дабы новой темы не создавать спрошу здесь.
Не получается по описанным способам получить из страницы текст в переменную.

HttpObj := ComObjCreate("WinHttp.WinHttpRequest.5.1")
HttpObj.Open("POST", "http://pwlegendary.ucoz.ru/Clients.txt")
HttpObj.Send()

rawHtmlResponse := HttpObj.ResponseText

document := ComObjCreate("HTMLfile")
document.write(rawHtmlResponse)
textElement := document.getElementsByTagName("pre")[0].innertext

MsgBox, % textElement 

Не работает никак.

;Константы используемые в 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 сайта РБК http://forum.script-coding.com/ "http://pwlegendary.ucoz.ru/Clients.txt
oHtmlDoc := documentFromURL("http://pwlegendary.ucoz.ru/Clients.txt")

MsgBox, % oHtmlDoc.body.outerText

Работает, но извлекает в сплошную линию, нужно извлечь так же как открывается ссылка то есть построчно.

	wb := COM_CreateObject("InternetExplorer.Application")
	wb.visible := True
	wb.navigate("http://pwlegendary.ucoz.ru/Clients.txt")
	While wb.readystate <> 4
		sleep, 100
	OutputText := wb.document.getElementsByTagName("pre")[0].innertext
	MsgBox, % OutputText
	wb.quit()

С этим вариантом вообще глюки. Один раз извлек, потом поменял содержимое на странице и при повторном запуске получал результат с первого запуска и так далее. wb.quit вообще не помогает, в диспетчере задач окна остаются. Примечание: первый запуск был wb.visible := false, может скрытое окно где-то в системе потерялось и из него прошлые результаты извлекались. Пробовал другими способами отследить и убить скрытые объекты IE, - не помогло.

В общем, есть ссылка. Как извлечь построчно текст не знаю.

Вариант с FTP не подходит.

33

Re: AHK: Получить текст с HTML страницы в переменную

url := "http://pwlegendary.ucoz.ru/Clients.txt"
http := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
http.Open("GET", url)
http.Send()
http.WaitForResponse()
MsgBox, % http.ResponseText
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

34

Re: AHK: Получить текст с HTML страницы в переменную

teadrinker, спасибо, если честно, то искал с обеда по интернету ответ.)

35

Re: AHK: Получить текст с HTML страницы в переменную

teadrinker,
http.WaitForResponse() - здесь лишний.

36

Re: AHK: Получить текст с HTML страницы в переменную

Да, точно, это только для асинхронного варианта.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

37

Re: AHK: Получить текст с HTML страницы в переменную

Странникх, вы ведь темой ошиблись. Вам же не текст html страницы нужен, а просто файл.

Странникх пишет:

искал с обеда

WTF???
первая ссылка,
URLdownloadToVar.

38

Re: AHK: Получить текст с HTML страницы в переменную

Мне нужен именно текст, потому что как я писал выше

Странникх пишет:

Вариант с FTP не подходит.

Вариант с FTP я начинал еще использовать пару лет назад. Мне через скачивание не нужно, не подходит для целей просто вот и все.

teadrinker, а как вывести условие (что-то вроде if site != open), что проблема с соединением (нет подключения) или запрос на страницу не загружается?

39

Re: AHK: Получить текст с HTML страницы в переменную

Как-то так:

url := "http://pwlegendary.ucoz.ru/Clients.txt"
http := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
http.Open("GET", url)
try http.Send()
catch e  {
   MsgBox,, Ошибка подключения, % e.Message
   Return
}
MsgBox, % http.ResponseText
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

40

Re: AHK: Получить текст с HTML страницы в переменную

А если ссылка удалена (если не существует, ошибка 404)?

Модератор: Избыточное цитирование запрещено. Цитата предыдущего поста удалена.

41 (изменено: teadrinker, 2017-04-28 02:40:46)

Re: AHK: Получить текст с HTML страницы в переменную

В том виде, в котором сейчас, с точки зрения http-запроса это не ошибка, просто сайт отдаёт страницу с такой информацией. Так что только парсингом ответа.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

42 (изменено: stealzy, 2017-04-28 03:31:58)

Re: AHK: Получить текст с HTML страницы в переменную

Странникх, какое ftp, где вы его увидели вообще тут? По ссылкам пройдите хоть...
Тема про получение текста из html. А вам нужно просто содержание файла по url, на что и даны ссылки.
Разницу понимаете?

В UrlDownloadToVar() ошибки помещаются в ErrorLevel.

43

Re: AHK: Получить текст с HTML страницы в переменную

А, вспомнил, возвращённый код статуса нужно проверить:

url := "http://pwlegendary.ucoz.ru/Clients.txt"
http := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
http.Open("GET", url)
try http.Send()
catch e  {
   MsgBox,, Ошибка подключения, % e.Message
   Return
}
status := http.Status
if (status != 200)  { ; HTTP_STATUS_OK
   MsgBox,, Что-то не так, Status = %status%
   Return
}
MsgBox, % http.ResponseText
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

44

Re: AHK: Получить текст с HTML страницы в переменную

Я бы это

if (status != 200)  { ; HTTP_STATUS_OK

заменил на

if (status != 200) and (status != 304) { ; HTTP_STATUS_OK

304 Not Modified (не изменялось)

45

Re: AHK: Получить текст с HTML страницы в переменную

А в каком случае может прийти последнее?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

46

Re: AHK: Получить текст с HTML страницы в переменную

Сам нашёл:

304 Not Modified — сервер возвращает такой код, если клиент запросил документ методом GET, использовал заголовок If-Modified-Since или If-None-Match и документ не изменился с указанного момента.

По-моему, не тот случай.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

47 (изменено: Malcev, 2017-04-28 16:53:32)

Re: AHK: Получить текст с HTML страницы в переменную

Согласен. Пока случай не тот.
Но, по-моему, лучше заранее предусмотреть и такой вариант.
Хотя, вроде как, возможны всякие случаи:

IIS 7 returns 304 instead of 200
I have a strange issue with IIS 7.
Sometimes it seems to return a 304 instead of a 200.
Here is a sample request captured with Fiddler:
(Note that the file requested is not located in my browsers cache yet.)

GET https://[mysite]/Content/js/jquery.form.js HTTP/1.1
Accept: */*
Referer: https://[mysite]/Welcome/News
Accept-Language: sv-SE
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; OfficeLiveConnector.1.4; OfficeLivePatch.1.3; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Host: [mysite]
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ...

Note that there is no If-Modified-Since or If-None-Match in the request.
But still the response is:

HTTP/1.1 304 Not Modified
Cache-Control: public
Expires: Tue, 02 Mar 2010 06:26:08 GMT
Last-Modified: Mon, 22 Feb 2010 21:58:44 GMT
ETag: "1CAB40A337D4200"
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Mon, 01 Mar 2010 17:06:34 GMT

https://serverfault.com/questions/11797 … ead-of-200

48

Re: AHK: Получить текст с HTML страницы в переменную

Malcev пишет:

Хотя, вроде как, возможны всякие случаи

Так зачем гадать, ответ зависит от запроса.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

49

Re: AHK: Получить текст с HTML страницы в переменную

Ну по ссылке, котоую я привел, как я понял, человек не отправляя ни If-Modified-Since ни If-None-Match получал в ответ 304.

50

Re: AHK: Получить текст с HTML страницы в переменную

Ну, просто объект выдал поведение, которое не описано в той справке, которую человек читал. Все такие случаи предусмотреть невозможно, почему ты именно этот берёшь?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg