Что нового

[Сеть, интернет] Как получить переменную элемента таблицы без "id" и "name"?

BadVolt

Новичок
Сообщения
8
Репутация
1
Добрый день. Необходимо уловить добавление строки в таблицу и кликнуть по ней. Собственно, чтобы кликнуть по ней с помощью _IEAction необходимо предварительно присвоить переменную данному элементу, если я правильно понимаю.
Изначально я пробовал получить значения с помощью _IETableGetCollection, таким кодом
Код:
For $i=0 to 10 step 1
		$Table=_IETableGetCollection($ObjWindow,$i)
		$TableData=_IETableWriteToArray($Table)
		_ArrayDisplay($TableData,"Table"&$i)
	Next

но скрипт выдаёт ошибку при заполнении массива [2]. Table 0 и Table 1 отображаются нормально:
Код:
: ==> Array variable subscript badly formatted.:
Local $a_TableCells[$i_cols][$i_rows]
Local $a_TableCells[^ ERROR

Сам код таблицы выглядит следующим образом:

image_5120ebf30f9e4.jpg


Код:
<div style="width: 0px;" class="datagrid-view1"><div style="width: 0px; height: 21px;" class="datagrid-header"><div style="display: block;" class="datagrid-header-inner"><table style="height: 22px;" border="0" cellSpacing="0" cellPadding="0"><tbody></tbody></table></div></div><div style="width: 0px; height: 766px;" class="datagrid-body"><div class="datagrid-body-inner"></div></div><div style="width: 0px;" class="datagrid-footer"><div style="display: none;" class="datagrid-footer-inner"></div></div></div><div style="left: 0px; width: 874px;" class="datagrid-view2"><div style="width: 874px; height: 21px;" class="datagrid-header"><div style="display: block;" class="datagrid-header-inner"><table style="height: 22px;" border="0" cellSpacing="0" cellPadding="0"><tbody><tr><td field="checkbox"><div style="width: 27px; text-align: center;" class="datagrid-cell"><span></span><span class="datagrid-sort-icon"> </span></div></td><td field="name"><div style="width: 231px; text-align: left;" class="datagrid-cell"><span>Имя</span><span class="datagrid-sort-icon"> </span></div></td><td field="w"><div style="width: 231px; text-align: left;" class="datagrid-cell"><span>Регион</span><span class="datagrid-sort-icon"> </span></div></td><td field="rl"><div style="width: 231px; text-align: left;" class="datagrid-cell"><span>Пришел с адреса</span><span class="datagrid-sort-icon"> </span></div></td><td field="d"><div style="width: 91px; text-align: left;" class="datagrid-cell"><span>Дата</span><span class="datagrid-sort-icon"> </span></div></td></tr></tbody></table></div></div><div style="width: 874px; height: 766px;" class="datagrid-body"><table border="0" cellSpacing="0" cellPadding="0"><tbody><tr class="datagrid-row" datagrid-row-index="0"><td field="checkbox"><div style="width: 27px; height: auto; text-align: center;" class="datagrid-cell "><input name="selected[]" value="206551" type="checkbox"></div></td><td field="name"><div style="width: 231px; height: auto; text-align: left;" class="datagrid-cell ">Testtesttest Test</div></td><td field="w"><div style="width: 231px; height: auto; text-align: left;" class="datagrid-cell ">Россия</div></td><td field="rl"><div style="width: 231px; height: auto; text-align: left;" class="datagrid-cell "></div></td><td field="d"><div style="width: 91px; height: auto; text-align: left;" class="datagrid-cell ">17.02.2013 10:04</div></td></tr><tr class="datagrid-row" datagrid-row-index="1"><td field="checkbox"><div style="width: 27px; height: auto; text-align: center;" class="datagrid-cell "><input name="selected[]" value="206447" type="checkbox"></div></td><td field="name"><div style="width: 231px; height: auto; text-align: left;" class="datagrid-cell ">test test</div></td><td field="w"><div style="width: 231px; height: auto; text-align: left;" class="datagrid-cell ">Россия</div></td><td field="rl"><div style="width: 231px; height: auto; text-align: left;" class="datagrid-cell "></div></td><td field="d"><div style="width: 91px; height: auto; text-align: left;" class="datagrid-cell ">17.02.2013 00:13</div></td></tr></tbody></table></div><div style="width: 874px;" class="datagrid-footer"><div style="display: none;" class="datagrid-footer-inner"></div></div></div><div class="datagrid-resize-proxy"></div><table style="display: none;" id="regs">
			</table>

Как видно из кода, Тэг 'div' передаёт не id каждого элемента, а класс и стиль.. и вот как схватить нужный элемент представленный этими классом и стилем - вопрос, на который у меня нет ответа.

Единственная зацепка, которую мне удалось нащупать такая:

Код:
Local $ObjWindowHTML = _IEBodyReadHTML($ObjWindow)
	For	$i=10 to 0 step -1
		If StringInStr($ObjWindowHTML,'<tr class="datagrid-row" datagrid-row-index="'&$i&'">') Then
			MsgBox(0,"Found", "datagrid-row-index="&$i)
		EndIf
	Next

Но толку от этого пока что не много. Лишь проверка на наличие строк, без возможности совершения с ней какого-либо действия.

Так вот главный вопрос.
Каким образом можно щёлкнуть на строку этой таблицы (если это вообще таблица)?
Если это слишком сложно, то не проще ли передать значение 'datagrid-row-index' напрямую? Если проще, то как это сделать? :-[

Извиняюсь, если говорю непонятно ))


п.с. Щёлкнуть по строке нужно для того, чтобы справа появилось скрытое меню вида:
image_5120eeea23a30.jpg
[/URL]
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
BadVolt,
Дайте ссылку на эту страницу.
 
Автор
B

BadVolt

Новичок
Сообщения
8
Репутация
1
К сожалению, не получится. Страница спрятана за формой логина/пароля с изменяющимся токеном :'(
Если поможет, могу предоставить полный html код и JS.

Так это выглядит:
https://www.dropbox.com/s/ue4x077fux0vamu/Scr93.jpg
Хтмл:
https://www.dropbox.com/s/latd6rptk1pyt0v/pre_reg_html.txt
Скрипты
https://www.dropbox.com/s/lueennjx6yk7h29/JS.rar

Так же, если я правильно понял, работа всего сайта строится на движке
jQuery EasyUI http://www.jeasyui.com/

Может быть кто-то знаком с ним?

Вот что касается таблиц на jQuery EasyUI
http://www.jeasyui.com/demo/main/index.php?plugin=Tabs&theme=default&dir=ltr&pitem=

В документации на их сайте есть раздел посвящнный заполнению этих таблиц. DataGrid называется.. Но я человек далёкий от html, js и php, поэтому мало что там могу понять.

Вот, кстати, нашел пример этих таблиц.
http://www.jeasyui.com/demo/main/index.php?plugin=DataGrid&theme=default&dir=ltr&pitem=

Различие лишь в том, что в моём случае при щелчке на строку всплывает новое окно. Но это уже "дальше в лес" :shok:
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Какая версия IE? В 9 и выше, коллекцию элементов можно получить по имени класса.
Код:
$oIE.document.getelementsbyclassname('datagrid-row')

Дальше перечисляете всю коллекцию в поисках подходящего и вызываете метод click.
 
Автор
B

BadVolt

Новичок
Сообщения
8
Репутация
1
Код:
$oIE.document.getelementsbyclassname('datagrid-row')

Дальше перечисляете всю коллекцию в поисках подходящего и вызываете метод click.

Спасибо, попробую - отпишусь о результатах. Если я правильно понял,то возвращенное значение вполне может использоваться в _IEAction?

И ещё вопрос.. общий скорее. Что значат "."? Действие, совершаемое над предыдущим объектом?
Покопался и узнал, что это метод, совершаемый над объектом :smile: т.е. в моем случае над переменной, присвоенной объекту. Может кому пригодится :smile:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
BadVolt [?]
Вот, кстати, нашел пример этих таблиц.
Пример работы с этой таблицей.
Код:
#include <IE.au3>

;без проверок на ошибки

$oIE = _IECreate('http://www.jeasyui.com/demo/main/index.php?plugin=DataGrid&theme=default&dir=ltr&pitem=')
Sleep(4000)
$oTRs = _IETagNameGetCollection($oIE, 'tr')

For $oTR In $oTRs
	If $oTR.classname == 'datagrid-row' Then
		ConsoleWrite('TR: ' & _IEPropertyGet($oTR, 'outerhtml') & @LF)
		ConsoleWrite('-------' & @LF)
		_IEAction($oTR, 'focus')
		_IEAction($oTR, 'click')
		Sleep(1000)
		$oTDs = _IETagNameGetCollection($oTR, 'td')
		For $oTD In $oTDs
			ConsoleWrite('TD: ' & _IEPropertyGet($oTD, 'innertext') & @LF)
		Next
		ConsoleWrite('-------' & @LF)
	EndIf
Next
 
Автор
B

BadVolt

Новичок
Сообщения
8
Репутация
1
Спасибо за помощь :laugh:
Адаптирую под свой код, выложу решение в первом сообщении.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
BadVolt,
Или так.
Код:
#include <IE.au3>

;без проверок на ошибки
$iNum = 0
$oIE = _IECreate('http://www.jeasyui.com/demo/main/index.php?plugin=DataGrid&theme=default&dir=ltr&pitem=')
Sleep(4000)
$oTRs = _IETagNameGetCollection($oIE, 'tr')

For $oTR In $oTRs
	If $oTR.classname == 'datagrid-row' Then
		ConsoleWrite('Index: ' & $iNum & @LF)
		ConsoleWrite('TR ID: ' & $oTR.id & @LF)
		ConsoleWrite('-------' & @LF)
		_IEAction($oTR, 'focus')
		_IEAction($oTR, 'click')
		Sleep(1000)
		$oTAGs = _IETagNameAllGetCollection($oTR)
		For $oTAG In $oTAGs
			ConsoleWrite('<' & $oTAG.tagname & '>' & @TAB & 'class: ' & $oTAG.classname & @TAB & 'text: ' & $oTAG.innertext & @LF)
		Next
		ConsoleWrite('-------' & @LF)
		$iNum += 1
	EndIf
Next
 
Верх