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

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

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);
}
 
Пока писал, возникли сомнения по поводу пары моментов:
1. Возможно, некоторые ненужные тяжелые элементы будут грузиться уже после готовности страницы, аяксом.
2. Возможно, DOM-дерево создается уже ПОСЛЕ рендеринга страницы, и делать ДО этого поиск по XPath будет невозможно.

Возможное альтернативное решение:
Повесить хук на событие готовности документа(это будет работать и для основной страницы, и во фреймах) и добавлять в него строку со стилем:
Код:
Развернуть Свернуть Копировать
<style>div.ads, table#qwerty { display: none; } </style>
 
1. сейчас можно отключить CSS и не париться, на счет тяжелых элементов (надо отключить css ДО загрузки страницы). xpath можно применить только после
1.1 если нужно сейчас удалять тяжелые элементы можете написать javascript, который выполняется на странице и удаляет их.
2. в последующих билдах будет добавлена возможность отключать загрузку рекламы и не нужных файлов и скриптов, это решит проблему тяжелых страниц, на уровне загрузки, до построения DOM модели.
 
>1.1
Но js выполнится уже после рендеринга страницы, когда тяжелые элементы уже будут отрисованы.

> 2
Это уже делается, или только в планах?
 
как отключать css?
 
Экшен Браузер - Настройки - Загрузка стилей
 
о, классно! а он их вообще загружать не будет или только браузеру не будет передавать? а то хороший сигнал серверу для отслеживания автоматизаторов
 
первый уровень css грузится с сервера,
вложенные css уже нет, т.к. первый уровень css не анализируется в постере при включенной настройке игнорирования стилей.
 
  • Спасибо
Реакции: Nick
>1.1 Но js выполнится уже после рендеринга страницы, когда тяжелые элементы уже будут отрисованы.
жрет много анимация и последующая обработка, а ее можно отключить и после загрузки, чтоб постоянно не жрала.
> 2 Это уже делается, или только в планах?
делается.
 

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