1 (изменено: user, 2015-07-31 19:34:17)

Тема: AHK: Чтение страницы браузера, поиск bb-code и его использование

Здравствуйте. Я у вас впервые и прошу помочь с моей нелегкой задачей.
Моя цель - создать скрипт, который, в свою очередь, сможет в фоне открывать некую страницу в интернете, искать элемент bb-code, а именно unread:

<b class="unread">Sample text.</b>

Затем считывать количество данных элементов на странице, а после выводить уведомление о количестве этих самых элементов. Да еще, чтобы при нажатии на уведомление открывалась эта самая страница в интернете в браузере по умолчанию.
Также, необходимо чтобы скрипт каждые 30 секунд обновлял эту страницу в фоне, проверяя на наличие непрочитанных сообщений. Если появляется непрочитанное сообщение, оно же содержит в себе элемент unread, то пользователь получает уведомление в трее о том, что Непрочитанных сообщений — 1.
Я не прошу полностью написать скрипт, а только помочь разобраться с чтением страницы и поиске элемента unread, а также его (их) конвертации в количественное значение.

2 (изменено: Malcev, 2015-07-31 20:55:05)

Re: AHK: Чтение страницы браузера, поиск bb-code и его использование

HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
HTTP.Open("GET", "http://ya.ru")
HTTP.Send()
MsgBox, % HTTP.ResponseText

Потом посчитать количество совпадений с помощью:
http://www.script-coding.com/AutoHotkey … place.html

Также, необходимо чтобы скрипт каждые 30 секунд обновлял эту страницу в фоне, проверяя на наличие непрочитанных сообщений

Это через SetTimer:
http://www.script-coding.com/AutoHotkey/SetTimer.html
Уведомление в трее:
https://www.autohotkey.com/docs/commands/TrayTip.htm
Отследить клик по нему можно так:

#Persistent
DetectHiddenWindows, On

~LButton::
MouseGetPos,,, ID,,2
WinGetClass, Class, ahk_id %ID%
IfNotEqual, Class, tooltips_class32, Return
WinGet, style, style, ahk_id %ID% 
If ! ( style & 0x40 )
     Return
MsgBox, Tray Tip was Clicked
Return

3

Re: AHK: Чтение страницы браузера, поиск bb-code и его использование

Дело в том, что при чтении страницы не используется браузер по умолчанию, что делает невозможным прочтение некоторых страниц сайта. А именно, личных сообщений. Как быть?

4

Re: AHK: Чтение страницы браузера, поиск bb-code и его использование

Посмотреть, какие Post запросы отправляются.
И попробовать отправить их.
Вот например на наш форум так заходит:

url := "http://forum.script-coding.com/login.php"
login := "login"
password := "pass"

cookies := Object()
WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
WebRequest.Open("GET", url)
WebRequest.Send()
SaveCookies(WebRequest, cookies)
RegExMatch(WebRequest.ResponseText,"csrf_token"" value=""(\w+)"" />", match)
token := match1
loginBody := "form_sent=1&redirect_url=http%3A%2F%2Fforum.script-coding.com%2Flogin.php&csrf_token=" token "&req_username=" login "&req_password=" password "&login=%D0%92%D0%BE%D0%B9%D1%82%D0%B8"
WebRequest.Open("POST", url)
WebRequest.SetRequestHeader("Content-Type","application/x-www-form-urlencoded")
SetCookies(WebRequest, cookies)
WebRequest.Send(loginBody)
If Instr(WebRequest.ResponseText, "Вы вошли как")
   msgbox All Ok!
Else
   msgbox Failed!
return

SaveCookies(ByRef WebRequest, ByRef cookies) {
    While (p := RegexMatch(WebRequest.GetAllResponseHeaders, "U)(^|\R)Set-Cookie:\s(.+)=(.+);.+domain=(.+)(\R|;|$)", match, p?p+1:1))
        cookies[match4, match2] := match3
}
 
SetCookies(ByRef WebRequest, ByRef cookies) {
    url := WebRequest.Option(1) ;the url that we are going to send our request to
    If (p := InStr(url,"://"))
        url := SubStr(url, p+3)
    If (p := InStr(url,"/"))
        url := SubStr(url, 1, p-1)
    If (p := InStr(url,"@"))
        url := SubStr(url, p+1)
    If (p := InStr(url,":"))
        url := SubStr(url, 1, p-1)
    StringSplit, a, url, .
    b := a0-1
    domain := a%b%
    ext := a%a0%
    url := "." . domain . "." . ext
 
    cookieString := ""
    For id, value in cookies[url]
        cookieString .= id . "=" . value . "; "
 
    If (cookieString) ;if there are any cookies
        WebRequest.SetRequestHeader("Cookie", cookieString)
}