Сведения о вопросе

Killer

13:19, 1st August, 2020

Теги

jQuery   Node.js    

Алгоритм определения визуально скрытых HTMLDom элементов

Просмотров: 330   Ответов: 4

Есть задача: по коду html-страницы программно определить список скрытых (не видимых глазом) html элементов.
Первое что приходит в голову: взять node.js + jquery (http://habrahabr.ru/blogs/javascript/104761/) и поиграть с псевдоселектором :visible, но есть сомнение, что в данном случае не будут учитываться css файлы.

Вопрос знатокам: можно ли научить данную свзяку учитывать css файлы и как это сделать?

PS. также буду благодарен другим способам решения задачи на базе linux.



  Сведения об ответе

darknet

17:08, 26th August, 2020

Если не ломает запускать на сервере полноценный браузер — посмотрите в сторону Selenium. Имели опыт написания парсеров/грабберов на нем — есть API для практически любого языка (сами на PHP писали).
Коротко о нем: запускается браузер, и работа ведется непосредственно с уже отрендеренной в браузере страницей. Так что обрабатываются и css, и $('#element').hide() всякие.
Плюс запуск «на поиграться посмотреть» достаточно прост, что не маловажно.


  Сведения об ответе

fo_I_K

16:01, 16th August, 2020

Я бы:
1. Спарсил CSS на наличие :hidden, на выходе массив стилей скрывающих элементы.
2. Парсинг HTML включение только элементов с :hidden и имеющих стиль из массива CSS(п.1).

Парсинг уже чем кому удобней +)


  Сведения об ответе

P_S_S

03:38, 23rd August, 2020

Это невозможно в рамках поставленной задачи. Формулируйте задачу конкретнее. Т.к. от ширины экрана отображающего устройства видимость объектов изменется. Когда я писал антиспам для ворпресса я стандартную форму ввода двинул на 3000 пикселей влево, а не выставлял :hidden, т.к. некоторые боты парсят :hidden. С точки зрения юзера же не видно ни то ни другое. Другое дело если вам надо найти элементы которые никогда не могут быть показаны, это уже более реальная задача.


  Сведения об ответе

DAAA

06:40, 20th August, 2020

Может так?
offsetHeight == 0? hidden: visible


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться