Войти

Показать полную графическую версию : [решено] Нужна помощь с StringRegExpReplace ( "test", "PATTERN-ом", "\1").


ikif
27-07-2009, 06:33
Доброе утро.
Помогите прицепиться к нужным данным для StringRegExpReplace.

Уровень и силу получаю, вот все остальное не получается :


#include <IE.au3>

$oIE = _IECreate ("http://kokto.ru/")
$oForm = _IEFormGetCollection ($oIE, 0)
$email = _IEFormElementGetCollection ($oForm, 1)
$pass= _IEFormElementGetCollection ($oForm, 2)
_IEFormElementSetValue ($email, "abastrakciya@mail.ru")
_IEFormElementSetValue ($pass, "test123")
_IEFormSubmit ($oForm)

_IELoadWait ($oIE)
_IEImgClick ($oIE, "but_bodalka_p.png", "src") ;Idem v Bodalku

While 1 ;Na4inaem iskat' Jertvu
_IELoadWait ($oIE)
$oForm = _IEFormGetCollection ($oIE, 0) ;Ishem Jertvu
_IEFormSubmit ($oForm)
$KodHtml=_IEDocReadHTML($oIE) ;Proveryaem nashli li kogo ?
$pattern="(?s).*?Никого (.*?) нашли.*"
$Kri = StringRegExpReplace($KodHtml, $pattern, "\1")
If $Kri <> "не" Then ;Esli nashli , to ne ishem dal'she
ExitLoop
EndIf
WEnd
$KodHtml=_IEDocReadHTML($oIE)
$pattern='(?s).*?<TD class="c3 center">(.*?)<TD.*'
$Lvl = StringRegExpReplace($KodHtml, $pattern, "\1") ;lvl

$pattern="(?s).*?<TD class=c4>(.*?)</TD.*"
$Sila = StringRegExpReplace($KodHtml, $pattern, "\1") ;Sila

$pattern='(?s).*?SPAN></TD><TD>(.*?)</TD></TR><TR><TD><IMG class=ico alt=Ловкость src="images/ico.*'
$Zashita = StringRegExpReplace($KodHtml, $pattern, "\1") ;Zashita

$pattern="(?s).*?<TD>(.*?)</TD></TR><TR class=row_1><TD><IMG class=ico alt=Масса.*"
$Lovkost = StringRegExpReplace($KodHtml, $pattern, "\1") ;Lovkost'

$pattern="(?s).*?<TD>(.*?)</TD></TR><TR class=row_1><TD><IMG class=ico alt=Слава.*"
$Master = StringRegExpReplace($KodHtml, $pattern, "\1")

MsgBox(0, "Lvl", $Lvl)
MsgBox(0, "Sila", $Sila)
MsgBox(0, "Zashita", $Zashita)
MsgBox(0, "Lovk", $Lovkost)
MsgBox(0, "Master", $Master)

amel27
27-07-2009, 16:08
чего-то не ищет, лучше выложи готовый HTML

ikif
27-07-2009, 18:45
Проблема выложить готовый HTML ,так как при сохранении он меняется, да и AUTOIt видит все по другому при прочтении странички с помощью _IEDocReadHTML .
Уже работает.
Kто то заходил и одел кулон, блокирующий атаки.
Форум то открытый :)

beve
28-07-2009, 01:05
Уровень и силу получаю, вот все остальное не получается »
Вот, пробуй:#include <IE.au3>

$oIE = _IECreate ("http://g1.botva.ru/")
$oForm = _IEFormGetCollection ($oIE, 0)
$email = _IEFormElementGetCollection ($oForm, 1)
$pass= _IEFormElementGetCollection ($oForm, 2)
_IEFormElementSetValue ($email, "abastrakciya@mail.ru")
_IEFormElementSetValue ($pass, "test123")
_IEFormSubmit ($oForm)

_IELoadWait ($oIE)
_IEImgClick ($oIE, "but_bodalka_p.png", "src") ;Idem v Bodalku

While 1 ;Na4inaem iskat' Jertvu
_IELoadWait ($oIE)
$oForm = _IEFormGetCollection ($oIE, 0) ;Ishem Jertvu
_IEFormSubmit ($oForm)
$KodHtml=_IEDocReadHTML($oIE) ;Proveryaem nashli li kogo ?
$pattern="(?s).*?Никого (.*?) нашли.*"
$Kri = StringRegExpReplace($KodHtml, $pattern, "\1")
If $Kri <> "не" Then ;Esli nashli , to ne ishem dal'she
ExitLoop
EndIf
Sleep(1000)
WEnd

$KodHtml=_IEDocReadHTML($oIE)

$pattern='(?s).*?<TD class="c3 center">(.*?)<TD.*'
$Lvl = StringRegExpReplace($KodHtml, $pattern, "\1") ;lvl

$pattern_Sila="(?si).*Сила.*c4>(\d*).*"
$Sila = StringRegExpReplace($KodHtml, $pattern_Sila, "\1")

$pattern_Masterstvo="(?si).*Мастерство.*?(\d*)</TD></TR>.*"
$Masterstvo = StringRegExpReplace($KodHtml, $pattern_Masterstvo, "\1")

$pattern_Lovkost="(?si).*Ловкость.*?(\d*)</TD></TR>.*"
$Lovkost = StringRegExpReplace($KodHtml, $pattern_Lovkost, "\1")

$pattern_Zaschita="(?si).*Защита.*?(\d*)</TD></TR>.*"
$Zashita = StringRegExpReplace($KodHtml, $pattern_Zaschita, "\1")

$pattern_Massa="(?si).*Масса.*?(\d*)</TD></TR>.*"
$Massa = StringRegExpReplace($KodHtml, $pattern_Massa, "\1")

$pattern_Slava="(?si).*Слава.*<TD class=center>(\d*).*"
$Slava = StringRegExpReplace($KodHtml, $pattern_Slava, "\1")

$pattern_Protivnik='(?si).*<DIV class="blockTitle2 ">(.*?)</DIV>.*'
$Protivnik = StringRegExpReplace($KodHtml, $pattern_Protivnik, "\1")


MsgBox(0, $Protivnik,"Уровень: "&$Lvl&@CRLF&"Сила: "&$Sila&@CRLF&"Защита: "&$Zashita&@CRLF&"Ловкость: "&$Lovkost&@CRLF&"Macca: "&$Massa&@CRLF&"Мастерство: "&$Masterstvo&@CRLF&"Слава: "&$Slava)

Несколько раз пробовал, вроде работает, но только при определенных условиях (какие у тебя в цикле прописаны, поэтому скрипт тебе нужно улучшать. Ибо теперь у меня появляется счетчик - и текст: Вы несете службу..., а что оно означает я не знаю... И соответственно, код страницы обрабатывается неправильно!)

ikif
28-07-2009, 02:23
Я учитываю в коде "Вы несете службу..."
Просто не стал выкладывать весь бардак.
Я застревал именно на "Уровень и силу получаю, вот все остальное не получается ".
Огромное спасибище.
Перед закрытием темы [решено] немного вопросов по теме:
Что они делают:
1) .* -
2) (\d*) -
3) (?:.*) -
4) (.*?) -
5) .*? -
6) (.*) -

beve
28-07-2009, 12:31
Что они делают: »
. - означает любой символ.
* - означает любое количество екземпляров предшествующего елемента (в том числе и нулевое).
(\d*) - означает захватить групировку из любого количества цифр.
(?:.*) - не захватывать групировку (символы могут быть сдесь любыми, на что указывает .*)
.*? - вопросительный знак сдесь это лекарство от жадности. Вот посмотри пример, и подумай в чем разница:;Пример 1
$1=StringRegExpReplace("текст 1234 текст 5678 текст",".*? (\d\d\d\d).*","\1")
;Пример 2
$2=StringRegExpReplace("текст 1234 текст 5678 текст",".* (\d\d\d\d).*","\1")
MsgBox(0,"Пример", "1 случай: "&$1&@CRLf&"2 случай: "&$2)

ikif
28-07-2009, 20:06
Спасибо огромное. [решено]




© OSzone.net 2001-2012