Удаление элементов из html перед рендерингом

famous1144

Client
Регистрация
27.03.2014
Сообщения
137
Благодарностей
53
Баллы
28
Сабж. ОЧЕНЬ нуждаюсь(да и думаю не я один) в такой функции, т.к. страницы часто перегружены ненужными данными, и выполнение проекта на не очень мощной машине ощутимо тормозит.

Как это можно реализовать:
1. Задаем список xpath-выражений, которые надо убрать из html при показе страницы. Например, так:
Код:
instance.ActiveTab.ElementsToRemove = new[] {
    "//div[@class='ads']",
    "//table[@id='qwerty']"
};
2. После получения страницы не сразу отдаем ее рендерить движку браузера, а делаем такую обработку:
Код:
//ReturnsHTML - то, что получили в ответе
//ElementsToRemove - список выражений для удаления

HtmlElement El;
foreach(var Expr in ElementsToRemove) {
    El = ReturnsHTML.FindElementById(Expr);
    if(!El.IsNull) El.ParentElement.RemoveChild(El);
}
 

famous1144

Client
Регистрация
27.03.2014
Сообщения
137
Благодарностей
53
Баллы
28
Пока писал, возникли сомнения по поводу пары моментов:
1. Возможно, некоторые ненужные тяжелые элементы будут грузиться уже после готовности страницы, аяксом.
2. Возможно, DOM-дерево создается уже ПОСЛЕ рендеринга страницы, и делать ДО этого поиск по XPath будет невозможно.

Возможное альтернативное решение:
Повесить хук на событие готовности документа(это будет работать и для основной страницы, и во фреймах) и добавлять в него строку со стилем:
Код:
<style>div.ads, table#qwerty { display: none; } </style>
 

darkdiver

Administrator
Команда форума
Регистрация
13.01.2009
Сообщения
2 285
Благодарностей
2 730
Баллы
113
1. сейчас можно отключить CSS и не париться, на счет тяжелых элементов (надо отключить css ДО загрузки страницы). xpath можно применить только после
1.1 если нужно сейчас удалять тяжелые элементы можете написать javascript, который выполняется на странице и удаляет их.
2. в последующих билдах будет добавлена возможность отключать загрузку рекламы и не нужных файлов и скриптов, это решит проблему тяжелых страниц, на уровне загрузки, до построения DOM модели.
 

famous1144

Client
Регистрация
27.03.2014
Сообщения
137
Благодарностей
53
Баллы
28
>1.1
Но js выполнится уже после рендеринга страницы, когда тяжелые элементы уже будут отрисованы.

> 2
Это уже делается, или только в планах?
 

Nick

Client
Регистрация
22.07.2014
Сообщения
1 983
Благодарностей
817
Баллы
113
как отключать css?
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
Экшен Браузер - Настройки - Загрузка стилей
 

Nick

Client
Регистрация
22.07.2014
Сообщения
1 983
Благодарностей
817
Баллы
113
о, классно! а он их вообще загружать не будет или только браузеру не будет передавать? а то хороший сигнал серверу для отслеживания автоматизаторов
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
первый уровень css грузится с сервера,
вложенные css уже нет, т.к. первый уровень css не анализируется в постере при включенной настройке игнорирования стилей.
 
  • Спасибо
Реакции: Nick

darkdiver

Administrator
Команда форума
Регистрация
13.01.2009
Сообщения
2 285
Благодарностей
2 730
Баллы
113
>1.1 Но js выполнится уже после рендеринга страницы, когда тяжелые элементы уже будут отрисованы.
жрет много анимация и последующая обработка, а ее можно отключить и после загрузки, чтоб постоянно не жрала.
> 2 Это уже делается, или только в планах?
делается.
 

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