Что нового

Проверка отображения ссылки

VanesPikines

Новичок
Доброго дня всем.
Cуть проблемы такая:

При загрузке страницы IE нужно найти ссылку1 , и если она найдена - продолжить скрипт.
Если вдруг отображается ссылка2 - скрипт завершается и устанавливается ошибка

Пользуюсь таким методом :

Код:
Sleep (300)
$sMyString = "ссылка2"
$oLinks = _IELinkGetCollection($oIE)
For $oLink In $oLinks
    $sLinkText = _IEPropertyGet($oLink, "innerText")
    If StringInStr($sLinkText, $sMyString) Then
        $Checked = True
                 ExitLoop
    EndIf
next
Sleep (300)
If $Checked Then
    $ERROR = ("Найдена ссылка 2")


Проблема в том - что код всегда находит на странице эти ссылки....Вне зависимости , отображаются ли они визуально или нет.
То есть- мой результат = Всегда найдено.... (Я не могу идентифицировать условие и продолжить свою работу.)
Видимо они как-то по хитрому выводятся через javascript на экран по мере надобности... и всегда присутствуют в коде в скрытом виде.

Пробовал устанавливать условие Focus да/нет.... Все равно скрипт выдает значение "да" - даже если ссылки нету на экране.....

Как можно определить отображается ли ссылка? Есть какие либо обработчики того- показывается ли ссылка?

Так же буду рад любым другим вариантам - как разрешить это условие....
 

gunter123

Продвинутый
Код:
#include "IE.au3"

; Тут создание IE объекта

........

MsgBox(4096, 'Видна ли ссылка', _IsLinkVisible($oIE, 'текст ссылки'))

; Функция возвращает True, если елемент <a> который содержит текст $s_Text существует и его видно
Func _IsLinkVisible($o_IE, $s_Text)         ; IE объект, искомый текст
   Local $o_Links = $o_IE.document.getElementsByTagName('a')
   For $o_Link In $o_Links
      If StringInStr($o_Link.innerText, $s_Text) And IsObj($o_Link.offsetParent) Then Return True ; Если ссылка содержит текст и ссылка не скрыта, возвращаем True
   Next
   Return False     ; Если видимых ссылок не найдено, возвращаем False
EndFunc
 
Последнее редактирование:
Автор
V

VanesPikines

Новичок
Код:
#include "IE.au3"

; Тут создание IE объекта

........

MsgBox(4096, 'Видна ли ссылка', _IsLinkVisible($oIE, 'текст ссылки'))

; Функция возвращает True, если елемент <a> который содержит текст $s_Text существует и его видно
Func _IsLinkVisible($o_IE, $s_Text)         ; IE объект, искомый текст
   Local $o_Links = $o_IE.document.getElementsByTagName('a')
   For $o_Link In $o_Links
      If StringInStr($o_Link.innerText, $s_Text) And IsObj($o_Link.offsetParent) Then Return True ; Если ссылка содержит текст и ссылка не скрыта, возвращаем True
   Next
   Return False     ; Если видимых ссылок не найдено, возвращаем False
EndFunc
Спасибо. Е еще не проверял. Как только внедрю в свой код -отпишу))
Сообщение автоматически объединено:

Код:
#include "IE.au3"

; Тут создание IE объекта

........

MsgBox(4096, 'Видна ли ссылка', _IsLinkVisible($oIE, 'текст ссылки'))

; Функция возвращает True, если елемент <a> который содержит текст $s_Text существует и его видно
Func _IsLinkVisible($o_IE, $s_Text)         ; IE объект, искомый текст
   Local $o_Links = $o_IE.document.getElementsByTagName('a')
   For $o_Link In $o_Links
      If StringInStr($o_Link.innerText, $s_Text) And IsObj($o_Link.offsetParent) Then Return True ; Если ссылка содержит текст и ссылка не скрыта, возвращаем True
   Next
   Return False     ; Если видимых ссылок не найдено, возвращаем False
EndFunc
Спасибо! Скрипт рабочий!!

Правда я изменил и сделал так :

If not StringInStr($o_Link.innerText, $s_Text) And IsObj($o_Link.offsetParent) Then.................... То что мне надо)
 
Последнее редактирование:
Верх