Теневой DOM

qwelip

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

molotok

Client
Регистрация
17.04.2015
Сообщения
733
Благодарностей
358
Баллы
63
А пример такой страницы можете привести, и какую информацию нужно получить?
 

qwelip

Client
Регистрация
25.02.2020
Сообщения
34
Благодарностей
1
Баллы
8
Выдача баннерной рекламы, на пример если зайти в новости Яндекса, там будет блок рекламы. Вот этот блок как раз и находится в таком теге - Теневой DOM . Хотелось бы вытащить оттуда урлы и картинки.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 718
Баллы
113

qwelip

Client
Регистрация
25.02.2020
Сообщения
34
Благодарностей
1
Баллы
8
Я и написал, что в Хроме я тоже вижу, а в самой программе, когда выбираю посмотреть модель DOM, там этого нет.

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

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 718
Баллы
113
ну не знаю . пробовал и под хромом и под файрфокс, картинки парсятся нормально. как видно на скрине из DOM все и парситься.

50779
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 718
Баллы
113

qwelip

Client
Регистрация
25.02.2020
Сообщения
34
Благодарностей
1
Баллы
8
А я нажимаю инструмент просмотра исходного кода, DOM и текста страницы. И там пусто. Видимо так неправильно...

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

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 718
Баллы
113
А я нажимаю инструмент просмотра исходного кода, DOM и текста страницы. И там пусто. Видимо так неправильно...

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

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

по xpath есть интересная статья
 
Последнее редактирование:
  • Спасибо
Реакции: bigloafer

TwistDanceR

Client
Регистрация
30.05.2019
Сообщения
479
Благодарностей
200
Баллы
43
А я нажимаю инструмент просмотра исходного кода, DOM и текста страницы. И там пусто. Видимо так неправильно...
Подскажите, а как вы XPath прописали чтобы нашелся нужный элемент?
Смотри не в DOM, а в Source.
Да и по XPath - дельный совет дали. Парсить можно не только этим экшеном.
 

qwelip

Client
Регистрация
25.02.2020
Сообщения
34
Благодарностей
1
Баллы
8

qwelip

Client
Регистрация
25.02.2020
Сообщения
34
Благодарностей
1
Баллы
8
ну не знаю . пробовал и под хромом и под файрфокс, картинки парсятся нормально. как видно на скрине из DOM все и парситься.

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

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

И я попробовал вставить ваш Xpath в свой проект ЗП, у меня ни чего не ищет...
50819
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 718
Баллы
113
не ищет, потому что ничего и нет. видно же на скрине. надо залогинеться в аккаунт яндекса, что бы эта реклама появилась.
две // указывают любое количество узлов между условиями поиска.
contains(@class,'prof') возвращает истину если есть вхождение текста 'prof' в @class . В данном случае я просто быстренько набрал часть класса , этого оказалось достаточно что бы выделить этот div
 

Max

Client
Регистрация
17.06.2012
Сообщения
168
Благодарностей
44
Баллы
28
Всем добрый день. Нужно из кода загруженной страницы забрать определенную информацию (хочу обратиться регуляркой к элементам и забрать их атрибут) , но ее нету в модели DOM в Зеннопостере, необходимый тег пустой, но если посмотреть на него же через Хром, окажется, что в теге все же необходимая инфа есть. Погуглил что это такое и нашел - Теневой DOM («Shadow DOM») используется для инкапсуляции ... к которому нельзя просто так обратиться из главного документа, у него могут быть изолированные CSS-правила и т.д. Вопрос - как мне все же добиться что бы этот код появился в программе или как обратиться к его элементам?
Что ты собираешься делать? Через исходник однозначно не увидишь.
1) Проверь что у тебя стоит ожидать загрузки ajax и отключена блокировка рекламы.
2) Теневой дом это не совсем то... К теневому дому ты можешь обратиться зная на каком фрамворке он написан , у некоторых есть такая возможность.
3) Скорее всего ты не находишь блок, потому что он автоматом рендерит и менять атрибуты. Те тебе сначало надо определить в каком месте на экране реклама... А оттуда уже искать все что ты хочешь. Для этого надо чекать координаты и рекурсивно проходить по всему дому.
 

qwelip

Client
Регистрация
25.02.2020
Сообщения
34
Благодарностей
1
Баллы
8
не ищет, потому что ничего и нет. видно же на скрине. надо залогинеться в аккаунт яндекса, что бы эта реклама появилась.
две // указывают любое количество узлов между условиями поиска.
contains(@class,'prof') возвращает истину если есть вхождение текста 'prof' в @class . В данном случае я просто быстренько набрал часть класса , этого оказалось достаточно что бы выделить этот div
Реклама как раз есть (чтобы Яндекс ее показал не надо логиниться). На скрине 2 картинки - арктический термос и магазин рюкзаков, это как раз реклама. То что я и пытаюсь собрать. Может быть там @class какой то динамический....
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 718
Баллы
113
Реклама как раз есть (чтобы Яндекс ее показал не надо логиниться). На скрине 2 картинки - арктический термос и магазин рюкзаков, это как раз реклама. То что я и пытаюсь собрать. Может быть там @class какой то динамический....
посмотрел более внимательно. нашел эту горизонтальную рекламу. в общем ситуация такая в зенке под движком файрфокса все можно найти, а вот под движком хрома дальше тега ya-recommendation-widget не пускает.
это и в самом деле похоже на "теневой DOM"
50830


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

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 718
Баллы
113
Апну тему. так сказать для решения этого вопроса.

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

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 518
Благодарностей
1 316
Баллы
113
посмотрел более внимательно. нашел эту горизонтальную рекламу. в общем ситуация такая в зенке под движком файрфокса все можно найти, а вот под движком хрома дальше тега ya-recommendation-widget не пускает.
это и в самом деле похоже на "теневой DOM"
Посмотреть вложение 50830

ну тут только в баги тему заводить.
@sergodjan66 Подскажите, пожалуйста, поднимался ли с того времени данный вопрос и были ли подвижки в зенке в этом направлении?
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 338
Благодарностей
9 087
Баллы
113
@sergodjan66 Подскажите, пожалуйста, поднимался ли с того времени данный вопрос и были ли подвижки в зенке в этом направлении?
Да, была дискуссия с программистами. Планируется сделать для open shadow root, но по конкретным срокам не смогу пока подсказать.
 

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