Что нового

Как составить цикл на соответствие параметра span заданному?

uritalex

Новичок
Сообщения
197
Репутация
3
Добрый день! сразу говорю поиск курил и неоднократно ! мне не хватает понимания что как делается и 4 суток попыток самостоятельно автоматизировать действия дают о себе знать :(
Но ближе к сути, цель такая необходим код обработки значения между тегами
Код:
<span class="cntr">15</span>
Но есть условия :
Возможность задать значению для проверки переменную что то вроде $oActiv
Т.е. при опросе страницы скрипт проверяет значение в <span class="cntr">15</span> и если оно меньше $oActiv или отсутствует вообще то совершает какое то действие
Код элемента:
Код:
<div class="lined_tit">
<h3>Активные проекты по продвижению видео</h3><span class="cntr">15</span>
</div>
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Код:
$oSpans=_IETagNameGetCollection($oIE,"span")
If IsObj($oSpans) Then
	For $oSpan In $oSpans
		If $oSpan.className <> "cntr" Then ContinueLoop
		$iCount = Number($oSpan.innerHTML)
		If $iCount > 15 Then MsgBox(0, 'больше', 'Переменная count = ' & $iCount & ', больше 15')
		; ...
	Next
EndIf
 
Автор
U

uritalex

Новичок
Сообщения
197
Репутация
3
Благодарю то что нужно :smile: возможно ли немного уточнить некоторые момент? просто хочу хоть чуток разобраться что да как:
Код:
$oSpans=_IETagNameGetCollection($oIE,"span") ; тут понятно вытаскиваются весь код с тегом span
If IsObj($oSpans) Then ; тут тож понятно проверяется на наличие положительно результата предыдущей команды т.е. на наличие обьекта
    For $oSpan In $oSpans
        If $oSpan.className <> "cntr" Then ContinueLoop ; тут идет проверка по ранее выбранным тегам span на наличия class "cntr" а что это дает [b]"<>" ??[/b]
        $iCount = Number($oSpan.innerHTML); тут чет не совсем понял :( Number - это возврат числа, а $oSpan.innerHTML текст страницы под искомыми тегами?
        If $iCount > 15 Then MsgBox (0, 'больше', 'Переменная count = ' & $iCount & ', больше 15') ну тут понятно, и в случае необходимости 15 можно заменить на переменную
        ; ...
    Next
EndIf
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
alex33,
А почему $oSpan.innerHTML, а не $oSpan.innertext?
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
uritalex [?]
тут понятно вытаскиваются весь код с тегом span
Это называется коллекция элементов.

тут идет проверка по ранее выбранным тегам span на наличия class "cntr" а что это дает "<>" ??
Ну убирите эту строку, да и узнаете... Если у span нет такого класса, то скрипт его пропустит и пойдёт дальше.

а $oSpan.innerHTML текст страницы под искомыми тегами?
Это текст внутри тега. Подробнее про innerHTML можно почитать здесь, здесь, здесь и здесь.
А Number просто преобразовывает строку в число, по идее, можно Number и убрать...
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
madmasles сказал(а):
alex33,
А почему $oSpan.innerHTML, а не $oSpan.innertext?
Да не знаю, привык как-то к HTML уже... :smile: Тем более, TEXT не во всех браузерах работает, а HTML во всех... Тест проводил когда-то. На замену innerTEXT там был textContent, но это надо было делать дополнительную проверку.


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

uritalex сказал(а):
madmasles сказал(а):
alex33,
А почему $oSpan.innerHTML, а не $oSpan.innertext?
И сразу глобальный вопрос: А что работает быстрее? И корректнее ?
Ну по поводу скорости, думаю одинаково... Но если в span кроме числа ничего больше нет, то использование innerHTML будет равносильно innerTEXT. Вот если бы было как-нибудь так:
Код:
<span><b>543</b></span>
, тогда да, тогда innerTEXT лучше.
 
Автор
U

uritalex

Новичок
Сообщения
197
Репутация
3
тут идет проверка по ранее выбранным тегам span на наличия class "cntr" а что это дает "<>" ??

Ну убирите эту строку, да и узнаете... Если у span нет такого класса, то скрипт его пропустит и пойдёт дальше.

Я не это имел ввиду :smile: это понятно что все нужно просто эти символы "<>" что дают?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
Разница между $oSpan.innerHTML и $oSpan.innertext при использовании Number():
Код:
#include <IE.au3>

Opt('MustDeclareVars', 1)

Local $sUrl = @ScriptDir & '\1.html', $oIE, $oSpans

Do
	$oIE = _IECreate($sUrl)
	$oSpans = _IETagNameGetCollection($oIE, 'span')
	If @error Then ExitLoop
	For $oSpan In $oSpans
		ConsoleWrite('HTML:' & $oSpan.innerHTML & ' --> Num HTML: ' & Number($oSpan.innerHTML) & ', Text: ' & $oSpan.innerText & ' --> Num Text: ' & Number($oSpan.innerText) & @LF)
	Next
Until 1
_IEQuit($oIE)
If @error Then ConsoleWrite('Error' & @LF)

1.html:
Код:
<html>
<head>
<title>Test</title>
</head>
<body>
<span class="cntr">15</span>
<span class="cntr">16</span>
<span class="cntr"><b>17</b></span>
<span class="cntr">18</span>
<span class="cntr">19</span>
<span class="cntr">20</span>
</body>
</html>


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

alex33 [?]
Тем более, TEXT не во всех браузерах работает
Поясните, не понял.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
madmasles [?]
Поясните, не понял.
В каких-то браузерах innerTEXT возвращает false / null / undefind, и если что-то из этого возвратилось, то запрашиваем textContent, он точно должен вернуть текст.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
madmasles [?]
Разница между $oSpan.innerHTML и $oSpan.innertext
textContent получает содержимое всех элементов, включая <script> и <style>, тогда как innerText этого не делает.
innerHTML, как можно понять из его названия, возвращает HTML. Довольно часто innerHTML используется для получения или записи текста в элемент. Тем не менее, вместо него желательно использовать textContent или innerText: этоти методы потребляют гораздо меньше ресурсов, так как текст парсится как текст, а не HTML.
 
Автор
U

uritalex

Новичок
Сообщения
197
Репутация
3
Если можно еще озадачу по этому же вопросу :smile: В процессе эксплуатации возникла некая не состыковка, дело в том что класс для искомого значения не уникален :( и на странице присутствуют еще 3 разных значения с данным классом. Единственное что отличает именно это значение это стоящие перед ним слова


Код:
<div class="lined_tit">
<h3>Тута слова</h3>
<span class="cntr">15</span>
</div>

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

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
uritalex [?]
Если можно еще озадачу

Предупреждение За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


С уважением, ваш Модератор.






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

uritalex [?]
Благодарю то что нужно

[info border=#0000ff float=left]На форуме принято помечать тему решенной после получения ответа на свой вопрос!
Вверху или внизу темы нажмите на ссылку такого вида:
package_old.gif
Тема не решена
[/info]
 
Автор
U

uritalex

Новичок
Сообщения
197
Репутация
3
вопрос то один и тот же :smile: просто немного расширилось условие и все! Но если скажете создать тогда создам не вопрос
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
uritalex
Постом выше всё написано, будьте добры придерживаться правил форума.
:Rulz:
 
Верх