Что нового

получить значение нестандартного свойства у HTML элемента

V

vladu

Гость
Добрый день коллеги,

помогите плиз ... как получить значение свойства у эллемента HTML, которое не является стандартным.
Пример
Код:
<label aaa="123">

необходимо получить значение свойства ааа

при использовании
Код:
_IEPropertyGet($label,'aaa')

возвращается 0
и сообщение IE.au3 V2.4-0 Error from function _IEPropertyGet, $_IEStatus_InvalidValue (Invalid Property)

при использовании
Код:
$labels = _IETagNameGetCollection ($oIE, "label")
For $label In $labels
      ConsoleWrite($label.aaa)
Next

возвращается ошибка "The requested action with this object has failed"

как дотянутся до ааа?

заранее спасибо за помощь,
Влад
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Нет такого свойства 'ааа'.
Список допустимых свойств вот тут
http://autoit-script.ru/autoit3_docs/libfunctions/_iepropertyget.htm



Добавлено:
Сообщение автоматически объединено:

Код:
$oTags = _IETagNameGetCollection ($oIE, "label")
For $Tag In $oTags
	ConsoleWrite($Tag.OuterHTML & @CRLF)
Next


Попроси кого-нибудь чтобы тебе регулярное выражение составили, как из OuterHTML получить '123'
 
Автор
V

vladu

Гость
C2H5OH

спасибо за подсказку!
но все еще тешу себя надеждой, что есть возможность более "красивее" получить значение такого свойства :smile:
задача вроде не совсем специфическая, что бы использовать текст и регулярное выражение
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
vladu
Вот пример, как получить значение "нестандартное"
Сам начал недавно изучать IE, и вот что получилось.
Код:
#include <IE.au3>
$sHtml = '<div id="feedback" class="autoit" aaa="Это произвольное aaa">NOTHING</div>'
_IEErrorHandlerRegister()
$oIE = _IECreate('about:blank',0,0)
_IEDocWriteHTML($oIE, $sHtml)
$oDiv = _IEGetObjById($oIE,'feedback')
$oNode = $oDIV.attributes.getNamedItem("aaa")
If IsObj($oNode) Then
	ConsoleWrite($oNode.nodeValue & @LF)
Else
	ConsoleWrite("! Не объект" & @LF)
EndIf
$oIE.quit()
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
OffTopic:
А не проще просто по регулярному выражению из HTML кода получить?
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
DarWiM [?]
А не проще просто по регулярному выражению из HTML кода получить?
Если нужно получить ссылку в виде текста то да, проще через регулярные выражение.
Но если нужно получить объект, для которого потом нужно выполнять опр. действия, например click(), то регулярки тут не помогут)
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
inververs
В моём понимании автор хотел получить только значение нестандартного свойства, а значение это то, что в ковычках. Вот для такого случая проще использовать RegExp, ИМХО
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
inververs [?]
Но если нужно получить объект, для которого потом нужно выполнять опр. действия, например click(), то регулярки тут не помогут)
Почему?
Код:
#include <IE.au3>

$sSearch = 'a.aa'
$sValue = 'Это произвольное aaa'
$sHtml = '<a id="feedback" href="http://autoit-script.ru/" a.aa=''Это произвольное aaa''>Click me</a>'

$oIE = _IECreate('about:blank')
_IEDocWriteHTML($oIE, $sHtml)
$oClick = _IEGetObjById($oIE, 'feedback')
$sHtml = _IEPropertyGet($oClick, 'outerhtml')
ConsoleWrite($sHtml & @LF)
$sName = StringRegExpReplace($sHtml, '(?is).*\Q' & $sSearch & '\E=[''"]{1}(.*?)[''"]{1}.*', '$1')
If @extended <> 1 Then Exit -13
ConsoleWrite($sName & @LF)
If $sName == $sValue Then
	_IEAction($oClick, 'click')
	_IELoadWait($oIE)
	MsgBox(64, 'Info', $sSearch & ' = ' & $sName)
Else
	MsgBox(16, 'Error', 'No ' & $sSearch & ' (:')
EndIf
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
madmasles
Так вы тут получили объект по ID, и потом узнали, содержит ли он определенный аттрибут. Это немного не то.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
inververs [?]
Так вы тут получили объект по ID, и потом узнали, содержит ли он определенный аттрибут. Это немного не то.
Это же простой пример. Получайте всю коллекцию нужных Вам объектов по тегу - _IETagNameGetCollection(), или, если он не известен, - _IETagNameAllGetCollection() и проверяйте наличие нужного свойства, или кардинально - _IEBodyReadHTML() и соответствующий паттерн для поиска. ИМХО.
Пример.
Код:
#include <IE.au3>

$sSearch = 'a.aa'
$sValue = 'Это произвольное aaa'

$sHtml = '<a href="http://www.google.ru/" target="_blank">Click me</a>
'
$sHtml &= '<a href="http://www.yandex.ru/" target="_blank">Click me</a>
'
$sHtml &= '<a href="http://autoit-script.ru/" a.aa=''Это произвольное aaa'' target="_blank">Click me</a>
'
$sHtml &= '<a href="http://mail.ru/" target="_blank">Click me</a>'

$oIE = _IECreate('about:blank')
_IEDocWriteHTML($oIE, $sHtml)

;если Tag не известен
$sBody = _IEBodyReadHTML($oIE)
$sTagAll = StringRegExpReplace($sBody, '(?is).*(<.*?\Q' & $sSearch & '\E=.*?' & '\Q' & $sValue & '\E.*?>).*', '$1')
If @extended = 1 Then ;Yes
	ConsoleWrite($sTagAll & @LF)
	$sHref = StringRegExpReplace($sTagAll, '(?is).*href="(.+?)".*', '$1')
	ConsoleWrite($sHref & @LF)
	;_IENavigate($oIE, $sHref);раскомментируйте эти 2 строки, если есть href
	;Exit
Else
	Exit -13
EndIf
;Если обязательно надо кликнуть или Tag известен
;$sTag = 'a'
$sTag = StringRegExpReplace($sTagAll, '(?is).*<([a-z]+)\s.*', '$1')
ConsoleWrite($sTag & @LF)
$oClicks = _IETagNameGetCollection($oIE, $sTag)
For $oClick In $oClicks
	$sHtml = _IEPropertyGet($oClick, 'outerhtml')
	If StringRegExp($sHtml, '(?is)\Q' & $sSearch & '\E=.*?' & '\Q' & $sValue & '\E') Then
		$oClick.target = '_self'
		_IEAction($oClick, 'click')
		_IELoadWait($oIE)
		ExitLoop
	EndIf
Next
 
Верх