Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Нужна помощь с StringRegExpReplace ( "test", "PATTERN-ом", "\1"). (http://forum.oszone.net/showthread.php?t=146319)

ikif 27-07-2009 06:33 1178613

[решено] Нужна помощь с StringRegExpReplace ( "test", "PATTERN-ом", "\1").
 
Доброе утро.
Помогите прицепиться к нужным данным для 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 1179042

чего-то не ищет, лучше выложи готовый HTML

ikif 27-07-2009 18:45 1179192

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

beve 28-07-2009 01:05 1179444

Цитата:

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

Вот, пробуй:
читать дальше »
Код:

#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 1179478

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

beve 28-07-2009 12:31 1179707

Цитата:

Цитата ikif
Что они делают: »

. - означает любой символ.
* - означает любое количество екземпляров предшествующего елемента (в том числе и нулевое).
(\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 1180039

Спасибо огромное. [решено]


Время: 20:59.

Время: 20:59.
© OSzone.net 2001-