Теневой DOM

  • Автор темы Автор темы qwelip
  • Дата начала Дата начала

qwelip

Client
Регистрация
25.02.2020
Сообщения
34
Реакции
1
Баллы
8
Всем добрый день. Нужно из кода загруженной страницы забрать определенную информацию (хочу обратиться регуляркой к элементам и забрать их атрибут) , но ее нету в модели DOM в Зеннопостере, необходимый тег пустой, но если посмотреть на него же через Хром, окажется, что в теге все же необходимая инфа есть. Погуглил что это такое и нашел - Теневой DOM («Shadow DOM») используется для инкапсуляции ... к которому нельзя просто так обратиться из главного документа, у него могут быть изолированные CSS-правила и т.д. Вопрос - как мне все же добиться что бы этот код появился в программе или как обратиться к его элементам?
 
Выдача баннерной рекламы, на пример если зайти в новости Яндекса, там будет блок рекламы. Вот этот блок как раз и находится в таком теге - Теневой DOM . Хотелось бы вытащить оттуда урлы и картинки.
 
теневой не теневой.... парсится все раз, два.

50775
 
Я и написал, что в Хроме я тоже вижу, а в самой программе, когда выбираю посмотреть модель DOM, там этого нет.

И важный момент! Блоки с новостями и блоки с рекламой это разное. Только рекламный блок имеет эту скрытую часть.
 
ну не знаю . пробовал и под хромом и под файрфокс, картинки парсятся нормально. как видно на скрине из DOM все и парситься.

50779
 
А я нажимаю инструмент просмотра исходного кода, DOM и текста страницы. И там пусто. Видимо так неправильно...

Подскажите, а как вы XPath прописали чтобы нашелся нужный элемент?
 
А я нажимаю инструмент просмотра исходного кода, DOM и текста страницы. И там пусто. Видимо так неправильно...

Подскажите, а как вы XPath прописали чтобы нашелся нужный элемент?
где то пролетало что у кого то DOM не видно было. возможно баг. у себя на 7.1.1.0 не замечал проблем с DOM

ну как прописал... вообще руками :-) непонятно в чем вопрос.
если про то как его составлять, то посмотрел структуру страницы, выделил ключевые уникальные элементы и составил xpath.

по xpath есть интересная статья
 
Последнее редактирование:
  • Спасибо
Реакции: bigloafer
А я нажимаю инструмент просмотра исходного кода, DOM и текста страницы. И там пусто. Видимо так неправильно...
Подскажите, а как вы XPath прописали чтобы нашелся нужный элемент?

Смотри не в DOM, а в Source.
Да и по XPath - дельный совет дали. Парсить можно не только этим экшеном.
 
ну не знаю . пробовал и под хромом и под файрфокс, картинки парсятся нормально. как видно на скрине из DOM все и парситься.

Посмотреть вложение 50779
Можно попросить пояснить работу //*/div[contains(@class,'prof')]//img . Спасибо заранее!

Весь код просмотрел, не нашел элемента prof. И почему перед img стоит две // ?

И я попробовал вставить ваш Xpath в свой проект ЗП, у меня ни чего не ищет...
50819
 
не ищет, потому что ничего и нет. видно же на скрине. надо залогинеться в аккаунт яндекса, что бы эта реклама появилась.
две // указывают любое количество узлов между условиями поиска.
contains(@class,'prof') возвращает истину если есть вхождение текста 'prof' в @class . В данном случае я просто быстренько набрал часть класса , этого оказалось достаточно что бы выделить этот div
 
Всем добрый день. Нужно из кода загруженной страницы забрать определенную информацию (хочу обратиться регуляркой к элементам и забрать их атрибут) , но ее нету в модели DOM в Зеннопостере, необходимый тег пустой, но если посмотреть на него же через Хром, окажется, что в теге все же необходимая инфа есть. Погуглил что это такое и нашел - Теневой DOM («Shadow DOM») используется для инкапсуляции ... к которому нельзя просто так обратиться из главного документа, у него могут быть изолированные CSS-правила и т.д. Вопрос - как мне все же добиться что бы этот код появился в программе или как обратиться к его элементам?
Что ты собираешься делать? Через исходник однозначно не увидишь.
1) Проверь что у тебя стоит ожидать загрузки ajax и отключена блокировка рекламы.
2) Теневой дом это не совсем то... К теневому дому ты можешь обратиться зная на каком фрамворке он написан , у некоторых есть такая возможность.
3) Скорее всего ты не находишь блок, потому что он автоматом рендерит и менять атрибуты. Те тебе сначало надо определить в каком месте на экране реклама... А оттуда уже искать все что ты хочешь. Для этого надо чекать координаты и рекурсивно проходить по всему дому.
 
не ищет, потому что ничего и нет. видно же на скрине. надо залогинеться в аккаунт яндекса, что бы эта реклама появилась.
две // указывают любое количество узлов между условиями поиска.
contains(@class,'prof') возвращает истину если есть вхождение текста 'prof' в @class . В данном случае я просто быстренько набрал часть класса , этого оказалось достаточно что бы выделить этот div
Реклама как раз есть (чтобы Яндекс ее показал не надо логиниться). На скрине 2 картинки - арктический термос и магазин рюкзаков, это как раз реклама. То что я и пытаюсь собрать. Может быть там @class какой то динамический....
 
Реклама как раз есть (чтобы Яндекс ее показал не надо логиниться). На скрине 2 картинки - арктический термос и магазин рюкзаков, это как раз реклама. То что я и пытаюсь собрать. Может быть там @class какой то динамический....
посмотрел более внимательно. нашел эту горизонтальную рекламу. в общем ситуация такая в зенке под движком файрфокса все можно найти, а вот под движком хрома дальше тега ya-recommendation-widget не пускает.
это и в самом деле похоже на "теневой DOM"
50830


ну тут только в баги тему заводить.
 
  • Спасибо
Реакции: Castaneda
Апну тему. так сказать для решения этого вопроса.

Так то глянул в инете по этому вопросу, нуууу можно охарактеризовать как - а тучки то сгущаются. на многих сайтах наверно скоро этот теневой dom будет.
Немного порыл и не нашел под зенку решения, как же боту получить доступ в теневой DOM под хромом. Под файрфокс не считается, он уже устарел , поэтому эта технология там и не работает, но и сам этот движок уже никто не будет использовать. Вот под селениум есть решение. Какое то решение через JS есть, но чот у меня нифига не вышло.
Может надо предложение делать разработчикам для внедрения функционала, как у селениума или может кто знает пути обхода и с текущим функционалом ?
 
  • Спасибо
Реакции: molotok и Castaneda
посмотрел более внимательно. нашел эту горизонтальную рекламу. в общем ситуация такая в зенке под движком файрфокса все можно найти, а вот под движком хрома дальше тега ya-recommendation-widget не пускает.
это и в самом деле похоже на "теневой DOM"
Посмотреть вложение 50830

ну тут только в баги тему заводить.

@sergodjan66 Подскажите, пожалуйста, поднимался ли с того времени данный вопрос и были ли подвижки в зенке в этом направлении?
 
@sergodjan66 Подскажите, пожалуйста, поднимался ли с того времени данный вопрос и были ли подвижки в зенке в этом направлении?
Да, была дискуссия с программистами. Планируется сделать для open shadow root, но по конкретным срокам не смогу пока подсказать.
 
  • Спасибо
Реакции: bigloafer, Sho и The_vAe

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)