Что нового

[Сеть, интернет] Получение списка таблиц

edyapd

Осваивающий
Сообщения
380
Репутация
30
Получаю таблицы таким образом:
Код:
#include <IE.au3>
$oIE = _IECreate ("[i]сайт[/i]")
$oTable = _IETableGetCollection ($oIE,0)
MsgBox(0, "Table Info", "There are " & $oTable & " tables on the page")

Но проблема что после входа на сайт меня перекидывают на другую страницу.
Пытаюсь сделать так:
После регистрации и перехода
Код:
Sleep(5000)
$oIE = _IEAttach ("qwe", "text")
$oTable = _IETableGetCollection ($oIE,0)
MsgBox(0, "Table Info", "There are " & $oTable & " tables on the page")

$oTable при выводе сообщения игнорируется, как будто его нет.
Подскажите что делаю не правильно.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
edyapd [?]
$oTable при выводе сообщения игнорируется
Это объект, и обращаться нужно к нему как к объекту, :

Код:
#include <IE.au3>
#include <Array.au3>

$oIE = _IE_Example("table")
$oTable = _IETableGetCollection($oIE, 0)
MsgBox(0, "Table Info", "There are " & @extended & " tables on the page")

$aTableData = _IETableWriteToArray($oTable)
_ArrayDisplay($aTableData)
 
Автор
E

edyapd

Осваивающий
Сообщения
380
Репутация
30
Код:
$oIE = _IEAttach("qwe","text")
$oTable = _IETableGetCollection($oIE, 0)

Находит 26 таблиц.
Подскажите как можно найти данную таблицу (чтобы не перебирать их все 26 шт.)
И вытащить из неё параметры:
Уровень = 1
Сила = 7
Защита = 7

<table class='skills'>

<tr onMouseOver="doItem('level','До следующего уровня осталось 5 опыта.','','0',event,this)" class='row_1'>
<td class='c1'><img src="images/ico_11.png" alt="Уровень" class='ico'></td>
<td class='c2 left'>Уровень
<td>1
<td colspan='2'>
</tr>
<tr onMouseOver="doItem('power','Базовое значение: 7','','0',event,this)" >
<td><img src="images/ico_12.png" alt="Сила" class='ico'></td>
<td class='left'>Сила</td>
<td class='c3'><span class='polzun'><img src='images/b2_2.gif' alt='' width='3' /><img src='images/b2_3.gif' alt='' width='113' /><img src='images/b2_4.gif' alt='' width='3' /><img src='images/b2_5.gif' alt='' width='17' /><img src='images/b2_6.gif' alt='' width='3' /></span></td>
<td class='c4'>7</td>
<td class='c5 bonus'></td>
</tr> <tr onMouseOver="doItem('block','Базовое значение: 7','','0',event,this)" class='row_1'>
<td><img src="images/ico_13.png" alt="Защита" class='ico'></td>
<td class='left'>Защита</td>
<td class='c3'><span class='polzun'><img src='images/b2_2.gif' alt='' width='3' /><img src='images/b2_3.gif' alt='' width='113' /><img src='images/b2_4.gif' alt='' width='3' /><img src='images/b2_5.gif' alt='' width='17' /><img src='images/b2_6.gif' alt='' width='3' /></span></td>
<td class='c4'>7</td>
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
edyapd [?]
Подскажите как можно найти данную таблицу (чтобы не перебирать их все 26 шт.)

Значение таблиц (и саму таблицу) можно найти:

[list type=decimal]
[*]По индексу:
Код:
$oTABLE = _IETableGetCollection( $oIE, $nIndex ) ; $nIndex индекс таблицы в документе

[*]По тексту в ячейки:
Код:
$oTR = _IETagNameGetCollection($oTABLE, "tr", $nIndex) ; $nIndex индекс строки в таблице
$oTD = _IETagNameGetCollection($oTR, "td", $nIndex) ; $nIndex индекс ячейки в строке
$oTD.innertext ; текст в ячейки

[*]По атрибутам:
Код:
$oTABLE.name ; любой атрибут (class, id, name, width и т. д.)
$oTR.name
$oTD.name

[/list]

Кстати вот тут человек искал ссылку по заданным критериям. Попробуйте пример переделать под свои нужды, должно работать.
 
Автор
E

edyapd

Осваивающий
Сообщения
380
Репутация
30
Можно про атрибуты чуть популярней.
Если в коде написано:
<table class='skills'>
То как правильно написать
Код:
$aTableData = _IETableWriteToArray($oTable.?)

$oTABLE.name ; любой атрибут (class, id, name, width и т. д.)
$oTR.name
$oTD.name

Просто для меня ООП лес дремучий, пытаюсь разобраться, но пока полный чайник.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Вот пример:
Код:
$oIE = _IECreate(@ScriptDir&"/test.html",0,0,1,1)
_IETableGetCollection($oIE)
If @error Then Exit
	
For $i = 0 To @extended -1
	$aTable = _IETableGetCollection($oIE, $i)
		If $aTable.className = "skills"Then
			$aTableData = _IETableWriteToArray($aTable)
			_ArrayDisplay($aTableData)
		EndIf
Next
 
Автор
E

edyapd

Осваивающий
Сообщения
380
Репутация
30
Garrett сказал(а):
Код:
If $aTable.className = "skills"Then

Пришлось только маленько переделать:
Код:
If ($aTable.className = "skills") And ($aTable.className <> "0") Then

А то выводил таблицы и без имени.
Спасибо за помощь.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
edyapd сказал(а):
Пришлось только маленько переделать:
Код:
If ($aTable.className = "skills") And ($aTable.className <> "0") Then

А то выводил таблицы и без имени.
Спасибо за помощь.

Ну, это в том случае если class не имеет значения! Если нет атрибута class, то таблица игнорируется!
ИМХО присваивать атрибут class без значения, извращение :smile:

Рад помочь.
 
Автор
E

edyapd

Осваивающий
Сообщения
380
Репутация
30
Garrett сказал(а):
Ну, это в том случае если class не имеет значения! Если нет атрибута class, то таблица игнорируется!
ИМХО присваивать атрибут class без значения, извращение :smile:
Рад помочь.
В исходном тексте стояло просто: <table>
И таблица выводилась пока я не доделал сравнение с "0".
Ну да сейчас всё Ок.
 
Верх