Что нового

[Сеть, интернет] Проблема с нажатием идентичных кнопок в IE

veretragna

Как писал, так и работает.
Сообщения
140
Репутация
10
Суть проблемы такова:
есть сайт с открытой админкой. список категорий состоит из множества простых и сложных элементов, т.е. один элемент имеет в своем составе название, кнопку "редактировать" и кнопку "удалить". пример такого элемента:

простой элемент
Код:
<TD class=text><A style="TEXT-DECORATION: none" href="menue_tools.php?nav_id=3490"><IMG border=0 src="bilder/plus.gif" width=11 height=11> Акумулятори, Батарейки, зарядки (Акумулятори, Батарейки, зарядки)</A>
</TD>
<TD>
<FORM method=post action=menue_tools.php><INPUT name=operation value=2 type=hidden><INPUT name=id value=3490 type=hidden><INPUT name=nav_id value=0 type=hidden><INPUT name=menue_id value=0 type=hidden><INPUT border=0 name=редактировать alt=редактировать align=absMiddle src="bilder/icon_edit.gif" type=image></TD></FORM>
<TD>
<FORM method=post action=menue_tools.php><INPUT name=operation value=7 type=hidden><INPUT name=id value=3490 type=hidden><INPUT name=nav_id value=0 type=hidden><INPUT name=menue_id value=0 type=hidden><INPUT border=0 name=loeschen alt=удалить align=absMiddle src="bilder/icon_del.gif" type=image></TD></FORM></TR>
<TR height=20>

сложный элемент:
Код:
<TD class=text>    <A style="TEXT-DECORATION: none" href="menue_tools.php?nav_id=3489"><IMG border=0 src="bilder/plus.gif" width=11 height=11> Сумки(чехли) для ноутбуків (Сумки(чехли) для ноутбуків)</A>
</TD>
<TD>
<FORM method=post action=menue_tools.php><INPUT name=operation value=2 type=hidden><INPUT name=id value=3489 type=hidden><INPUT name=nav_id value=3485 type=hidden><INPUT name=menue_id value=3485 type=hidden><INPUT border=0 name=редактировать alt=редактировать align=absMiddle src="bilder/icon_edit.gif" type=image></TD></FORM>
<TD>
<FORM method=post action=menue_tools.php><INPUT name=operation value=7 type=hidden><INPUT name=id value=3489 type=hidden><INPUT name=nav_id value=3485 type=hidden><INPUT name=menue_id value=3485 type=hidden><INPUT border=0 name=loeschen alt=удалить align=absMiddle src="bilder/icon_del.gif" type=image></TD></FORM></TR>
<TR height=20>

причем при нажатии на сложный элемент снизу выскакивают несколько простых (подкатегорий)

Страница, считанная с помощью _IEBodyReadHTML, во вложениях. _IEDocReadHTML возвращает крякозябры.

задача состоит в том, чтобы:
- средствами UDF IE.au3 сложить список сложных и простых элементов в любом виде
- сделать так, чтобы кнопки "удалить" нажимались поочередно, а не все вместе, и такие, которые соответствуют текущему названию.

Я программирую на AutoIt уже более 3 лет и имею опыт обращения с UDF IE.au3, но тут полная неразбериха. При попытке извлечь коллекцию с помощью
Код:
$oForm = _IEFormGetCollection($oIE, 0) ;_IEFormGetCollection($oIE, <-1, 0, 1, 2, 3, 4, 5, 6 и т.д.>) - результаты идентичны;
$loeschen = _IEFormElementGetObjByName($oForm, "loeschen")
результат нулевой, а @extended = 61, и соответственно обращения к $loeschen не приносят ничего.

Товарищи программисты, помогите разобраться!
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Ну, я вот таким извращённым методом нашел форму с кнопкой "удалить". Не знаю поможет тебе это или нет...

Код:
#include <IE.au3>

$oIE = _IECreate('C:\...\menue_list.html')

$oForms = _IEFormGetCollection($oIE)
MsgBox(0, 'Forms', 'error: ' & @error & @CRLF & 'extended: ' & @extended)

For $oForm in $oForms
	$oTags = _IETagNameAllGetCollection($oForm)
	If @error = 0 Then
		For $oElement In $oTags
			If StringInStr($oElement.outerHTML,"loeschen") > 0 Then MsgBox(0, 'Element Info', 'Form: ' & $oForm.name & @CRLF & 'Tagname: ' & $oElement.tagname & @CRLF & 'text: ' & $oElement.outerHTML)
			; вот здесь попробуй что-то сделать с формой $oForm
		Next
	EndIf
Next


Попробуй что-то сделать в найденной форме.
 
Автор
veretragna

veretragna

Как писал, так и работает.
Сообщения
140
Репутация
10
C2H5OH, спасибо большое. Все заработало, стоило изменить:

Код:
$oForms = _IEFormGetCollection($oIE)
MsgBox(0, 'Forms', 'error: ' & @error & @CRLF & 'extended: ' & @extended)

For $oForm in $oForms
	$oTags = _IETagNameAllGetCollection($oForm)
	If @error = 0 Then
		For $oElement In $oTags
			If StringInStr($oElement.outerHTML,"loeschen") > 0 Then
				MsgBox(0, 'Element Info', 'Form: ' & $oForm.name & @CRLF & 'Tagname: ' & $oElement.tagname & @CRLF & 'text: ' & $oElement.outerHTML)
				;*********************
				_IEAction($oElement, "click")
			EndIf
		Next
	EndIf
Next


Даже и не думал, что можно извлечь все имена в документе с помощью _IETagNameAllGetCollection. С уважением.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Я бы поступил так :smile:
Код:
#include<IE.au3>

$oIE = _IECreate(@ScriptDir & '\menue_list.html')
$oForms = _IEFormGetCollection($oIE)

For $oForm in $oForms
    $oDel = _IEGetObjByName($oForm, "loeschen")
    If @error = 0 Then
		; ConsoleWrite( $oDel.outerHTML & @CR)
		_IEAction($oDel, "click")
    EndIf
Next
 
Автор
veretragna

veretragna

Как писал, так и работает.
Сообщения
140
Репутация
10
Garrett, вашим методом я пробовал провести эту вещь до написания этой темы, и к сожалению находятся не все кнопки. Но все равно спасибо, код неплохой, можно будет использовать.
 
Верх