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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] [Решено]_IEFormElementRadioSelect его использование в нестандартных ситуаиях (http://forum.oszone.net/showthread.php?t=144793)

DjinnKo 11-07-2009 15:01 1164723

[Решено]_IEFormElementRadioSelect его использование в нестандартных ситуаиях
 
Здравствуйте, подскажите плз как выделить нежный radio в IE, если html не стандартный немного:
Код:

<td width="10"><input name="quiz_answer" value="7" type="radio"></td>
            <td>When a bet would be more than one third of the chips left in your stack.</td>

Получается что:
Код:

</td>
            <td>

Не позволяет правильно работать с:
Код:

_IEFormElementRadioSelect
Пробывал вырезать регулярным выражением:
Код:

$regexp = StringRegExp($HTML, 'type=\"radio\">(.*?)' & FileReadLine($file_handle, $k+2), 0)
Не сработало :( подскажите плз, как быть ?

P.S. в FileReadLine($file_handle, $k+2), 0) - находится строка: "When a bet would be more than one third of the chips left in your stack."

Заранее благодарен.

amel27 11-07-2009 15:53 1164769

DjinnKo, как насчет полного HTML/линка + подробное описание того, ЧТО нужно получить в результате?

DjinnKo 11-07-2009 16:23 1164789

Цитата:

Цитата amel27
DjinnKo, как насчет полного HTML/линка + подробное описание того, ЧТО нужно получить в результате? »

Извините, но полный линк не выйдет, вот щас дам пример и что надо сделать:

HTML код:

<FORM method=post encType=multipart/form-data>
<DIV class=question>
<P><B>Question</B></P></DIV>
<DIV class=answers>
<TABLE cellSpacing=0 cellPadding=5 width="100%" border=0>
<TBODY>
<TR>
<TD width=10><INPUT type=radio value=15 name=quiz_answer></TD>
<TD>You fold.</TD></TR>
<TR>
<TD><INPUT type=radio value=18 name=quiz_answer></TD>
<TD>You bet.</TD></TR>
<TR>
<TD><INPUT type=radio value=3 name=quiz_answer></TD>
<TD>You check.</TD></TR>
<TR>
<TD></TD>
<TD><INPUT type=submit value=Next></TD></TR></TBODY></TABLE></DIV><INPUT type=hidden value=2 name=quiz_action> <INPUT type=hidden value=50778310 name=quiz_aid> </FORM>

Это форма, собственно в ней находятся 3 Radio, мне соответственно надо выделить правильный вариант ответа и отправить форму. (форма в девственном виде)
Я решил сделать чек регуляркой:
Код:

value=(\d+)\sname=quiz_answer>.*?You check.
приблизительно такой регуляркой... но чет регулярки худо работают в autoit... :(
ну а потом с нужным value с помощью
Код:

_IEFormElementRadioSelect
выбрать ответ и отправить форму...

amel27 11-07-2009 17:43 1164844

Цитата:

Цитата DjinnKo
чет регулярки худо работают в autoit »

необоснованный наезд, читайте матчасть... ;)
Код:

$sHTML = FileRead("c:\TEST\test.html")
$sText = "You check."
$aVals = StringRegExp($sHTML, "(?im)^" & _
    "<TR>[^<]*" & _
        "<TD\b[^>]*>[^<]*" & _
            "<INPUT\b[^>]*?\bValue=(\d+)[^>]*>[^<]*" & _
        "</TD>[^<]*" & _
        "<TD\b[^>]*>\Q"& $sText &"\E</TD>[^<]*" & _
    "</TR>", 3)

If IsArray($aVals) Then ConsoleWrite("Value: "& $aVals[0] &@CRLF)


proxy 11-07-2009 17:53 1164851

DjinnKo, пример:

Код:

Opt('MustDeclareVars',      1)
Opt('TrayIconDebug',        1)

#include <IE.au3>

HotKeySet('{ESC}', '_Pro_Exit'); ESC - закрыть скрипт

Local $oIE, $oForm, $i

$oIE
= _IECreate('http://testing.ru/1.htm'); открытие ie окна и старницы 'http://testing.ru/1.htm'
$oForm = _IEFormGetCollection($oIE, 0); поиск и запись в переменную идентификатора (указаетля) первого найденного элемент form на старнице

For $i = 1 To 5
    ToolTip('перебор '& $i & ' из 5', 10, 100, 'Выбор radio # 3')
    _IEFormElementRadioSelect($oForm, 2, 'quiz_answer', 1, 'byIndex'); выбор радио кнопки с иминем 'quiz_answer' и индексом № 2 (среди всех лементов с иминем 'quiz_answer', этот элемент, по порядку расположения на странице, будет 3-им)
    Sleep(1000)

    ToolTip('перебор '& $i & ' из 5', 10, 100, 'Выбор radio # 2')
    _IEFormElementRadioSelect($oForm, 1, 'quiz_answer', 1, 'byIndex'); выбор радио кнопки с иминем 'quiz_answer' и индексом № 1 (среди всех лементов с иминем 'quiz_answer', этот элемент, по порядку расположения на странице, будет 2-им)
    Sleep(1000)

    ToolTip('перебор '& $i & ' из 5', 10, 100, 'Выбор radio # 1')
    _IEFormElementRadioSelect($oForm, 0, 'quiz_answer', 1, 'byIndex'); выбор радио кнопки с иминем 'quiz_answer' и индексом № 0 (среди всех лементов с иминем 'quiz_answer', этот элемент, по порядку расположения на странице, будет 1-им)
    Sleep(1000)
Next

Func
_Pro_Exit()
    Exit
EndFunc

Цитата:

Цитата DjinnKo
если html не стандартный немного »

имхо, radio кнопки в полне стандартные ...

DjinnKo, это очень верный и дельный совет:
Цитата:

Цитата amel27
как насчет полного HTML/линка + подробное описание того, ЧТО нужно получить в результате? »

а под словом полного - имхо, подразумевается весь html код страницы, как миниму от текга <body> и до </body>. Мож, там какие особенности ...

DjinnKo 12-07-2009 01:18 1165180

amel27, ты мне очень помог, сенкс :) все прекрасно работает... я таких регулярок раньше не писал... или синтаксис другой или я не сталкивался просто с таким...

Можете плз еще помочь мне с регуляркой: нужно сохранить все названия, с этого:
HTML код:

<FORM method=post encType=multipart/form-data>
<DIV class=question>
<P><B>Question</B></P></DIV>
<DIV class=answers>
<TABLE cellSpacing=0 cellPadding=5 width="100%" border=0>
<TBODY>
<TR>
<TD width=10><INPUT type=radio value=15 name=quiz_answer></TD>
<TD>You fold.</TD></TR>
<TR>
<TD><INPUT type=radio value=18 name=quiz_answer></TD>
<TD>You bet.</TD></TR>
<TR>
<TD><INPUT type=radio value=3 name=quiz_answer></TD>
<TD>You check.</TD></TR>
<TR>
<TD></TD>
<TD><INPUT type=submit value=Next></TD></TR></TBODY></TABLE></DIV><INPUT type=hidden value=2 name=quiz_action> <INPUT type=hidden value=50778310 name=quiz_aid> </FORM>

нужно сохранить:
Цитата:

You fold.
You bet.
You check.

Еще раз всем сенкс :)

и подскажите плз как выбрать вариант любой КРОМЕ того который нашелся с помощью регулярного выражения ?

amel27 12-07-2009 08:32 1165278

Цитата:

Цитата DjinnKo
нужно сохранить все названия »

аналогично:
Код:

$sHTML = FileRead("c:\TEST\test.html")
$aVals = StringRegExp($sHTML, "(?im)^" & _
    "<TR>[^<]*" & _
        "<TD\b[^>]*>[^<]*" & _
            "<INPUT\b[^>]*?\bValue=(\d+)[^>]*>[^<]*" & _
        "</TD>[^<]*" & _
        "<TD\b[^>]*>([^<]*)</TD>[^<]*" & _
    "</TR>", 3)

If IsArray($aVals) Then
    For
$i=0 To UBound($aVals)-1 Step 2
        ConsoleWrite("Value: "& $aVals[$i]  &@CRLF)
        ConsoleWrite("Text : "& $aVals[$i+1] &@CRLF&@CRLF)
    Next
EndIf

Цитата:

Цитата DjinnKo
как выбрать вариант любой КРОМЕ того который нашелся »

не понял вопрос - первый попавшийся что-ли?... есть массив ВСЕХ - фильтруйте стандартными средствами

DjinnKo 12-07-2009 12:59 1165407

amel27, сенкс, ну вот я знаю как посчету их любой выбрать:
Цитата:

_IEFormElementRadioSelect ($oForm, Random(0,2,1), "quiz_answer", 1, "byIndex")
все, в принципе второй вопрос отпадает после первого вопроса...

у меня тут есть еще 1 проблемка с этой регуляркой... но я сам поразбираюсь чтобы вас не тривожить.. если нет в эту тему напишу.

Большой спасибо Вам :)

DjinnKo 16-07-2009 18:24 1169665

Спасибо, вопросов нет :) все решено :)

Всем очень благодарен :)


Время: 10:57.

Время: 10:57.
© OSzone.net 2001-