Автор Тема: Проверить наличие определенной строки таблицы внутри формы (html)  (Прочитано 253 раз)

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

Эта тема содержит сообщение, помеченное как лучший ответ. Кликните здесь для перехода к этому сообщению.

Оффлайн ЭйчЭйч [?]

  • Сообщений: 108
  • Репутация: -1
    • Награды
  • Версия AutoIt: 3.3.14.0
<form id="command-data-form" action="/" method="post" onsubmit="this.submit.disabled=true;">
  <input type="hidden" name="attack" value="true" />
  <table class="vis" width="300">
        <tr><th  colspan="2">Приказ</th></tr>
        <tr><td>Пункт назначения:</td><td><span class="village_anchor" data-player="" data-id=""><a href="/" >Текст</a></span></td></tr>
  <tr><td>Игрок:</td><td><a href="/" >Игрок</a></td></tr>

Скрипт должен делать выбор, если есть строка <tr><td>Игрок:</td><td><a href="/" >Игрок</a></td></tr>, то нужно прекратить выполнение. Как правильно и лучше всего выцепить присутствие "Игрок:", если используется IE?

Мой вариант заканчивается на этом:
Код: AutoIt [Выделить]
$oForm = _IEGetObjById($oIE, "command-data-form")
; чего-то там в духе $oForm.table... Магия
IF $oForm.table.magic = "Игрок:" Then MsgBox (0, "Упс", "Завершено") EndIf




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


Оффлайн ЭйчЭйч [?]

  • Сообщений: 108

  • Автор темы
  • Репутация: -1
    • Награды
  • Версия AutoIt: 3.3.14.0
Я накалял DOM:
document.getElementById('formID').getElementsByTagName('table').row[2].cells[0].innerHTMLНо он в песочнице из под JS не работает. Я в DOM не силён.  :-\

Оффлайн gunter123 [?]

  • Осваивающий
  • **
  • Сообщений: 117
  • Репутация: 46
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Код: AutoIt [Выделить]
$oIE.document.getElementById('formID').getElementsByTagName('table')[0].rows[2].cells[0].innerText  ; вот так правильнее будет
$oIE.document.getElementsByClassName('vis')[0].rows[2].cells[0].innerText  ; Так тоже работает

Is it future or is it past?

Помечен как лучший ответ пользователем ЭйчЭйч Отправлен Март 09, 2019, 23:49:22

Оффлайн ЭйчЭйч [?]

  • Сообщений: 108

  • Автор темы
  • Репутация: -1
    • Награды
  • Версия AutoIt: 3.3.14.0
Благодарю. Я так понял, что где элемент не уникален, т.е. не ID, то использовать нужно указатель на элемент.

Код: AutoIt [Выделить]
Local $oIE = _IEAttach($title)
_IEAction($oIE, "refresh") ; проверка, что окно нужное
Local $sPlayerFlag = $oIE.document.getElementById('command-data-form').getElementsByTagName('table')[0].rows[2].cells[0].innerText
MsgBox(0, '', $sPlayerFlag)
Exit

:( Ошибки:
" ==> Subscript used on non-accessible variable.:
Local $sPlayerFlag = $oIE.document.getElementById('command-data-form').getElementsByTagName('table')[0].rows[2].cells[0].innerText
Local $sPlayerFlag = $oIE.document.getElementById('command-data-form').getElementsByTagName('table')^ ERROR
>Exit code: 1    Time: 18.45
The requested action with this object has failed
Subscript used on non-accessible variable.

Переезжать на 3.3.12?  :o Попробую еще из под 64-битной запустить.


Добавлено: Март 05, 2019, 21:49:39
В связи с тем, что представленное выше упало в ошибку - на getElementsByTagName() грабли, я решил поискать иные варианты.

Код: AutoIt [Выделить]
Local $sPlayerFlag = $oIE.document.getElementById('command-data-form').getElementsByTagName('span') ; пустота
Local $sPlayerFlag = $oIE.document.getElementById('command-data-form').getElementsByTagName('span')[0]; Subscript used on non-accessible variable.
Local $sPlayerFlag = $oIE.document.getElementById('command-data-form').getElementsByTagName('span')[0].innerText; Subscript used on non-accessible variable.
 



Добавлено: Март 05, 2019, 22:32:02
Пришел к такому варианту:
Код: AutoIt [Выделить]
; Внутри формы с Id существуют Span с классами, в том числе с нужным data-*, но так как ссылку по классу мне так не удалось сделать, то обход по всем Span в форме
$oForm = $oIE.document.getElementById('formId') ; Object
$oElement = _IETagNameGetCollection($oForm, 'tag', 0) ; Object
$sElement = $oElement.getAttribute('data-*'); String or Keyword (fail)
If IsString($sElement) and $sElement > 0 Then
      ; Ok
EndIf

Теперь, по-моему, короче некуда.  :D

Буду признателен, если кто-то напишет, как его улучшить.

Как нужно правильно делать, если ищете по классу или тэгу. Сам не проверял, но так не пробовал:
Код: AutoIt [Выделить]
$oElements = $oIE.document.getElementsByTagName('table')

for $oElement in $oElements
  ; делаем, что требуется
next

« Последнее редактирование: Март 09, 2019, 23:48:39 от ЭйчЭйч »

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


 

Похожие темы

  Тема / Автор Ответов Последний ответ
1 Ответов
3600 Просмотров
Последний ответ Ноябрь 25, 2009, 19:08:33
от dimontag
8 Ответов
6528 Просмотров
Последний ответ Июль 18, 2012, 12:10:10
от aleksandrovich
0 Ответов
2768 Просмотров
Последний ответ Июль 18, 2012, 10:21:07
от madmasles
1 Ответов
2495 Просмотров
Последний ответ Июнь 09, 2013, 17:17:27
от Garrett
8 Ответов
2418 Просмотров
Последний ответ Сентябрь 20, 2014, 22:00:37
от alex33
24 Ответов
7545 Просмотров
Последний ответ Май 05, 2015, 00:23:08
от Tapok
4 Ответов
1324 Просмотров
Последний ответ Январь 30, 2016, 23:57:20
от Vitorio
2 Ответов
723 Просмотров
Последний ответ Май 02, 2017, 12:02:02
от coul_28
2 Ответов
998 Просмотров
Последний ответ Сентябрь 13, 2017, 16:55:48
от Visors
0 Ответов
352 Просмотров
Последний ответ Февраль 05, 2018, 11:02:57
от Serega1383