1

Тема: AHK: Поиск фразы на странице в браузере

Привет всем. Объясню принцип работы программы. Программа должна проверять онлайн юзер или нет. Если онлайн, то его ник отображается в самой программе (GUI, ну или MsgBox), если оффлайн - не отображается. Если же все-таки юзер онлайн, то хотелось бы чтобы его ник вставлялся в определенную колонку в зависимости от его Группы. Как это сделать? Напишите код и объясните пожалуйста.

Вот сама страница: http://image.prntscr.com/image/b0f3bbbb578a4bd5ad44b31b6420ae27.png

Вот примерно как должна быть программа: http://image.prntscr.com/image/3f8ce9621b7146789fe95a11f9f825c1.png

То есть, если юзер выше будет "Online", то он будет выводится в колонке "Клан СМ".

2

Re: AHK: Поиск фразы на странице в браузере

Читайте про:

WinHttpRequest
RegexMatch

3

Re: AHK: Поиск фразы на странице в браузере

Почему не выводит?
https://pp.vk.me/c638221/v638221994/2928c/7JrYodh4jvM.jpg

4

Re: AHK: Поиск фразы на странице в браузере

А зачем ва IE?

link := "https://ahkscript.org"
http := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
http.Open("GET", link, False)
http.Send()
msgbox % http.responseText

5 (изменено: Elliot, 2017-01-27 22:25:41)

Re: AHK: Поиск фразы на странице в браузере

Какой мануал был, по такому и делал)
Вставил ваш код. Результат:
http://image.prntscr.com/image/3d85eacbc5e440bb94131f526bea9117.png

Upd:
Надо использовать http, а не https

6

Re: AHK: Поиск фразы на странице в браузере

Тогда вопрос.. Как мне получить переменную, которая будет показывать статус онлайна ?

7 (изменено: svoboden, 2017-01-27 23:03:50)

Re: AHK: Поиск фразы на странице в браузере

Тут может.

8

Re: AHK: Поиск фразы на странице в браузере

link := "http://cheat-master.ru/index/8-422195"
req := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
req.Open("GET", link, false)
req.Send()
text := req.responseText
If RegexMatch(text, "s)" link "'\)""><b>(.+?)</b>.+?>Группа:</div>\s*(.+?)\s*<.+<span class=""statusOnline"">Online</span>", match)
   msgbox % match1 "`n" match2

9 (изменено: svoboden, 2017-01-29 18:29:59)

Re: AHK: Поиск фразы на странице в браузере

Вот еще вариант:


global oHttpRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")

oHtmlDoc := documentFromURL("http://cheat-master.ru/index/8-422195")

MsgBox % SubStr(oHtmlDoc.body.outerText, 134, 15)

documentFromURL(ByRef sURL) {
    oHttpRequest.open("GET", sURL, false)
    oHttpRequest.send()
    return documentFromHTML(oHttpRequest.responseText, sURL)
}

documentFromHTML(ByRef sHTMLCode, ByRef sBaseURL) {
    oDoc := ComObjCreate("htmlfile")
    oDoc.open()
    oDoc.write("<base href=""" . sBaseURL . """>")
    oDoc.close()
    oDoc.body.innerHTML := sHTMLCode
    return oDoc
}

10

Re: AHK: Поиск фразы на странице в браузере

svoboden, а зачем вы объявляете переменные, которые потом нигде не используете?

global WinHttpRequestOption_EnableRedirects := 6
global WinHttpRequestOption_MaxAutomaticRedirects := 14
global WinHttpRequestOption_EnableHttpsToHttpRedirects := 12

И зачем используете SubStr, если загружаете все в htmlfile?
Вы пробовали свой метод с другими пользователями?

11 (изменено: svoboden, 2017-03-17 21:15:18)

Re: AHK: Поиск фразы на странице в браузере

Malcev, я нашел этот код и просто дописал: "SubStr" - это функция, вроде просто показывает нужную строку. А с другими пользователями, а чего не будет работать? Это просто мой вариант, у меня работает.

12 (изменено: Malcev, 2017-01-29 18:58:53)

Re: AHK: Поиск фразы на странице в браузере

Там где вы нашли этот код, эти переменные использовались.
На счет SubStr - вы полагаете, что нужная информация будет находиться у всех пользователей на 134 символе?

13

Re: AHK: Поиск фразы на странице в браузере

Malcev, так, это тоже вариант. Можно для каждого пользователя, написать свою функцию.

14

Re: AHK: Поиск фразы на странице в браузере

А если пользователь поменяет ник или перейдет в другую группу, то заново функцию писать?
Ваш вариант ненадежный.
Если хочется получать статус с помощью htmlfile:

link := "http://cheat-master.ru/index/8-422195"
req := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
req.Open("GET", link, false)
req.Send()
text := req.responseText

document := ComObjCreate("HTMLfile")
document.Open()
document.Close()
document.body.innerHTML := text
msgbox % document.getElementById("block6").innerText

15 (изменено: svoboden, 2017-03-17 21:15:55)

Re: AHK: Поиск фразы на странице в браузере

Зачем заново? Покажет ту же строку, с новым ником или группой. Malcev, а если "HTML" страница поменяется или еще чего, всякое бывает. Сложно сказать, какой вариант действительно надежно работает.

16

Re: AHK: Поиск фразы на странице в браузере

Покажет ту же строку, с новым ником, или группой.

global oHttpRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
oHtmlDoc := documentFromURL("http://cheat-master.ru/index/8-422195")


var := oHtmlDoc.body.outerText
MsgBox % SubStr(var, 134, 15)
StringReplace, var, var, [CM]Fanat1k, [CM]Fanat1k123456
MsgBox % SubStr(var, 134, 15)



documentFromURL(ByRef sURL) {
    oHttpRequest.open("GET", sURL, false)
    oHttpRequest.send()
    return documentFromHTML(oHttpRequest.responseText, sURL)
}

documentFromHTML(ByRef sHTMLCode, ByRef sBaseURL) {
    oDoc := ComObjCreate("htmlfile")
    oDoc.open()
    oDoc.write("<base href=""" . sBaseURL . """>")
    oDoc.close()
    oDoc.body.innerHTML := sHTMLCode
    return oDoc
}

17 (изменено: svoboden, 2017-01-29 21:13:48)

Re: AHK: Поиск фразы на странице в браузере

Malcev, а это что?

link := "http://cheat-master.ru/index/8-0-PasqualeQQ"
req := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
req.Open("GET", link, false)
req.Send()
text := req.responseText

document := ComObjCreate("HTMLfile")
document.Open()
document.Close()
document.body.innerHTML := text
msgbox % document.getElementById("block10").innerText

18

Re: AHK: Поиск фразы на странице в браузере

В смысле?

19

Re: AHK: Поиск фразы на странице в браузере

В смысле, что у другого пользователя, код неправильно находит строку. Хорошо, буду внимательно наблюдать, чтобы ответы точно совпадали с вопросами.

20

Re: AHK: Поиск фразы на странице в браузере

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

Вы неправильно скопировали код.
У меня:

msgbox % document.getElementById("block6").innerText

У вас:

msgbox % document.getElementById("block10").innerText

21

Re: AHK: Поиск фразы на странице в браузере

Malcev пишет:

А если пользователь поменяет ник или перейдет в другую группу, то заново функцию писать?
Ваш вариант ненадежный.
Если хочется получать статус с помощью htmlfile:

link := "http://cheat-master.ru/index/8-422195"
req := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
req.Open("GET", link, false)
req.Send()
text := req.responseText

document := ComObjCreate("HTMLfile")
document.Open()
document.Close()
document.body.innerHTML := text
msgbox % document.getElementById("block6").innerText

А как по данному коду связать это с GUI? Пример в шапке темы. Допустим хочется расположить ник пользователей в онлайне по группе (по столбцам). Как это осуществить? И да, если пользователь оффлайн, то его ник отображаться не должен. Как вы поняли я забью так не одну ссылку на профиль, а порядка 50. Эти 50 ссылок программа будет проверять на онлайн.