Помогите скорректировать код

Помощь в написании скриптов
MalefesO
Posts: 3
Joined: 14 Mar 2021, 02:24

Помогите скорректировать код

14 Mar 2021, 04:47

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

Code: Select all

pwb := ComObjCreate("InternetExplorer.Application")
pwb.Navigate("http uc.zone /cheat-statuses/games/DotA2/load-promocode")  Broken Link for safety
pwb.visible := true
while pwb.ReadyState != 4 or pwb.Busy
   sleep 50
If InStr(document.getElementsByClassName(gamePromocodeItem gamePromocode--promocode is-activated)[0].innerHTML, 414035BDB3642434)  ;искомое
    Send, F5
Else
   msgbox не найден
[Mod edit: [code][/code] tags added.]


Строчку я научился находить,но мне нужно,что если этот текст,который 414035BDB3642434 - изменился,то он копирует из gamePromocodeItem gamePromocode--promocode is-activated)[0].innerHTML , свежий и выполняет дальнейшие действия,которые я прописал.
Если строчка не изменилась,то каждую секунду обновляет страничку, пока он не поменяется
Подскажите,пожалуйста,как это можно реализовать или сколько эта подсказка будет стоить
mcl
Posts: 357
Joined: 04 May 2018, 16:35

Re: Помогите скорректировать код

14 Mar 2021, 14:40

Если промокод изменился, то он будет в том же месте, где вы и ищете. Можно просто сохранить его в переменную.

Code: Select all

Else
	; msgbox не найден
	promocode := document.getElementsByClassName("...")[0].innerHTML
	...
Нужно уточнить, что содержится в .innerHTML – только промокод или какой-то ещё текст. Если есть лишний текст, стоит выкусить требуемую часть, например, через Regexp:

Code: Select all

promocode := document.getElementsByClassName("...")[0].innerHTML
promocode := "Пример текста для проверки: ваш промокод – 1234567812345678!"
promocode := RegexReplace(promocode, "^.*([0-9A-F]{16}).*$", "$1")  ; оставляет от текста только 16 последовательных буквоцифр.
Неясно, как должен реагировать скрипт, если на месте промокода нет текста, или даже нет того блока, который вы проверяете.

Копирует – в смысле, в буфер обмена?

Code: Select all

Clipboard := promocode
Обновлять страницу каждую секунду – слишком часто, из-за нагрузки на сервер могут и забанить (и будут правы).
Собственно, само обновление элементарно – цикл и задержка.

Code: Select all

; IE запускается один раз, вне цикла – иначе будут открываться новые и новые окна, пока не закончится память.
pwb := ComObjCreate("InternetExplorer.Application")
; Переменная для хранения последнего промокода для сверки
lastPromocode := "414035BDB3642434"
...

; Бесконечный цикл
Loop {
	; Код загрузки страницы и получения кода
	; Можно не нажимать {F5}, а обновлять страницу повторным вызовом pwb.Navigate()
	...
	promocode := document.getElementsByClassName("...")[0].innerHTML
	
	If (InStr(promocode, lastPromocode)) {
		; Если промокод не обновился, задержка в пять секунд:
		Sleep 5000
		
	} Else {
		; Если обновился – выполняем нужные действия
		doActionsWithNewPromocode(promocode)
		; и либо завершаем цикл:
		Break
		; либо обновляем промокод и идём на новый круг:
		lastPromocode := promocode
	}
}
github://oGDIp - GDI+ wrapper for AHK v1.1
MalefesO
Posts: 3
Joined: 14 Mar 2021, 02:24

Re: Помогите скорректировать код

15 Mar 2021, 05:15

mcl wrote:
14 Mar 2021, 14:40
Если промокод изменился, то он будет в том же месте, где вы и ищете. Можно просто сохранить его в переменную.

Code: Select all

Else
	; msgbox не найден
	promocode := document.getElementsByClassName("...")[0].innerHTML
	...
Нужно уточнить, что содержится в .innerHTML – только промокод или какой-то ещё текст. Если есть лишний текст, стоит выкусить требуемую часть, например, через Regexp:

Code: Select all

promocode := document.getElementsByClassName("...")[0].innerHTML
promocode := "Пример текста для проверки: ваш промокод – 1234567812345678!"
promocode := RegexReplace(promocode, "^.*([0-9A-F]{16}).*$", "$1")  ; оставляет от текста только 16 последовательных буквоцифр.
Неясно, как должен реагировать скрипт, если на месте промокода нет текста, или даже нет того блока, который вы проверяете.

Копирует – в смысле, в буфер обмена?

Code: Select all

Clipboard := promocode
Обновлять страницу каждую секунду – слишком часто, из-за нагрузки на сервер могут и забанить (и будут правы).
Собственно, само обновление элементарно – цикл и задержка.

Code: Select all

; IE запускается один раз, вне цикла – иначе будут открываться новые и новые окна, пока не закончится память.
pwb := ComObjCreate("InternetExplorer.Application")
; Переменная для хранения последнего промокода для сверки
lastPromocode := "414035BDB3642434"
...

; Бесконечный цикл
Loop {
	; Код загрузки страницы и получения кода
	; Можно не нажимать {F5}, а обновлять страницу повторным вызовом pwb.Navigate()
	...
	promocode := document.getElementsByClassName("...")[0].innerHTML
	
	If (InStr(promocode, lastPromocode)) {
		; Если промокод не обновился, задержка в пять секунд:
		Sleep 5000
		
	} Else {
		; Если обновился – выполняем нужные действия
		doActionsWithNewPromocode(promocode)
		; и либо завершаем цикл:
		Break
		; либо обновляем промокод и идём на новый круг:
		lastPromocode := promocode
	}
}
Спасибо большое. Текст там 1,это эта комбинация цифр и букв. Сервера там позволяют обновлять каждую секунду. Текст там всегда есть. Он просто сверяет изменился ли текст в этом блоке,если с изначального изменился на новый,то копирует его дальше действия происходят,которые прописаны мной)

Return to “Помощь”

Who is online

Users browsing this forum: No registered users and 47 guests