Автор Тема: получить значение нестандартного свойства у HTML элемента  (Прочитано 4572 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн vladu [?]

  • Новичок
  • *
  • Сообщений: 17
  • Репутация: 1
    • Награды
Добрый день коллеги,

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

при использовании
Код: AutoIt [Выделить]
_IEPropertyGet($label,'aaa')

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

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

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

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

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

Русское сообщество AutoIt


Оффлайн C2H5OH [?]

  • Знаю я тут одно место с офигенными циркулями...
  • AutoIt Гуру
  • *****
  • Сообщений: 1473
  • Репутация: 330
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Нет такого свойства 'ааа'.
Список допустимых свойств вот тут
http://autoit-script.ru/autoit3_docs/libfunctions/_iepropertyget.htm



Добавлено: Июль 31, 2012, 17:18:18
Код: AutoIt [Выделить]
$oTags = _IETagNameGetCollection ($oIE, "label")
For $Tag In $oTags
    ConsoleWrite($Tag.OuterHTML & @CRLF)
Next


Попроси кого-нибудь чтобы тебе регулярное выражение составили, как из OuterHTML получить '123'
« Последнее редактирование: Июль 31, 2012, 17:20:29 от C2H5OH, Причина: Объединение сообщений »
Рано или поздно все станет понятно, все станет на свои места и выстроится в единую красивую схему, как кружева. Станет понятно, зачем все было нужно, потому что все будет правильно.

Оффлайн vladu [?]

  • Новичок
  • *
  • Сообщений: 17

  • Автор темы
  • Репутация: 1
    • Награды
C2H5OH

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

Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2129
  • Репутация: 459
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
vladu
Вот пример, как получить значение "нестандартное"
Сам начал недавно изучать IE, и вот что получилось.
Код: AutoIt [Выделить]
#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()


Русское сообщество AutoIt

Re: получить значение нестандартного свойства у HTML элемента
« Ответ #3 Отправлен: Август 04, 2012, 17:43:24 »

Оффлайн DarWiM [?]

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

Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2129
  • Репутация: 459
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
DarWiM  [?]
Цитировать
А не проще просто по регулярному выражению из HTML кода получить?
Если нужно получить ссылку в виде текста то да, проще через регулярные выражение.
Но если нужно получить объект, для которого потом нужно выполнять опр. действия, например click(), то регулярки тут не помогут)

Оффлайн DarWiM [?]

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

Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7790
  • Репутация: 2313
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
inververs  [?]
Цитировать
Но если нужно получить объект, для которого потом нужно выполнять опр. действия, например click(), то регулярки тут не помогут)
Почему?
Код: AutoIt [Выделить]
#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


Русское сообщество AutoIt

Re: получить значение нестандартного свойства у HTML элемента
« Ответ #7 Отправлен: Август 06, 2012, 01:17:08 »

Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2129
  • Репутация: 459
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
madmasles
Так вы тут получили объект по ID, и потом узнали, содержит ли он определенный аттрибут. Это немного не то.

Оффлайн madmasles [?]

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

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

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

« Последнее редактирование: Август 06, 2012, 18:13:10 от madmasles »

Русское сообщество AutoIt

Re: получить значение нестандартного свойства у HTML элемента
« Ответ #9 Отправлен: Август 06, 2012, 11:17:23 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
19 Ответов
5756 Просмотров
Последний ответ Ноябрь 14, 2010, 20:07:10
от madmasles
6 Ответов
3661 Просмотров
Последний ответ Январь 12, 2013, 17:18:40
от mousekey
6 Ответов
3014 Просмотров
Последний ответ Октябрь 17, 2012, 08:53:09
от PoleschenkoKV
1 Ответов
1158 Просмотров
Последний ответ Март 11, 2014, 16:06:53
от InnI
24 Ответов
14921 Просмотров
Последний ответ Ноябрь 21, 2016, 13:05:10
от delmetvfj
16 Ответов
3485 Просмотров
Последний ответ Июнь 22, 2015, 18:53:07
от Gen345
3 Ответов
1392 Просмотров
Последний ответ Январь 11, 2016, 11:41:38
от LuciferKo
4 Ответов
891 Просмотров
Последний ответ Январь 12, 2017, 06:50:19
от Dessan
5 Ответов
962 Просмотров
Последний ответ Январь 11, 2017, 13:26:16
от InnI
3 Ответов
340 Просмотров
Последний ответ Июль 20, 2017, 20:00:25
от Alofa