Нужна программа, чтобы обходила все html фалы в папке, и в них удаляла все элементы, у которых display:none. Желательно не на IE движке.

Это задача для несложного сценария на Python/PHP/Perl

krigstask 'несложным' сценарием неполучится. Такой скрипт должен загрузить, распарсить таблицы стилей, HTML валидатор короч как минимум получется.
Тут нужна прога на движке браузера.

Я иногда сохраняю сайты(прогой WinHTTrack)- различные книги, руководства. Чтобы потом читать на КПК. Удобно использовать CSS, чтобы отрубить рекламу и прочий мусор, но мобильные браузеры слабо его держат(IE особенно), кроме того страницы и так медленно рендрендятся, хорошо бы мусор совсем удалить.

Logo
Несогласен, но спорить не буду, движки бразуеров для такой задачи — забивание микроскопов гвоздями (-%Е

Если без движка браузера, то нужно сделать маленькую программку, которая бы парсила HTML, выстраивала дерево объектов, затем парсила CSS в масштабах CSS2 или CSS2.1+часть CSS3, и, учитывая все селекторы, их вложенность, перекрытие стилей и так далее, рассчитывала display: none; для конкретных элементов, при этом для начала должны собираться все стили по всем linkам, importам, и конечно же контейнерам style и атрибутам style= и корректно рассчитываться весы элементов и порядок обработки и important, после чего делается вывод о порядке перекрытия стилей и уже вычисляется стиль для конкретного элемента. Затем мы все эти элементы собираем, и либо распарсиваем HTML и не нарушая вложенности тэгов удаляем, либо работаем с уже распарсенным, удаляя узлы из дерева тэгов. Не забывая при этом весь остальной код осталять в неприкосновенности. Раз плюнуть.

Кстате можно сделать комбинированным PHP/JavaScript скриптом, и браузер тогда юзать любой. Вот кто бы еще сделал..

Al_H
Не надо усложнять, если используется отдельный внешний CSS для скрытия мусора (как я понял), то можно учитывать только его правила, пренебрегая всеми остальными вариантами присвоения display: none.

А как это сделать через бразуер? Хотя бы алгоритм поясните.


Есть альтернативное предложение: открывать страницы в Fx/Opera и "печатать" их в pdf. После чего смотреть уже в таком виде.

Не надо усложнять, если используется отдельный внешний CSS для скрытия мусора (как я понял),

Это почти не облегчает задачи(если без браузера), одни селекторы чего стоят.

Есть альтернативное предложение: открывать страницы в Fx/Opera и "печатать" их в pdf. После чего смотреть уже в таком виде.

Это будет изображение, на сколько я понимаю, по этому не подойдет. Т.к. экран у КПК/смарта маленький, придется елозить в лево-право, что жуть не удобно.

А как это сделать через бразуер? Хотя бы алгоритм поясните.

В DOM должно быть свойтво типа .style.display, яваскрипт будет загружать передаваемый пхп файл во фрейм, удалять все элементы с этим свойством ='none', и передавть обработанный код обратно пхп через POST.

В DOM должно быть свойтво типа .style.display

Тогда уж

Выделить код

Код:

var dspl = window.getComputedStyle(element, "").display;

Logo

Это почти не облегчает задачи(если без браузера), одни селекторы чего стоят

Это смотря какие селекторы. По-моему, обычно для блокировки используются несложные конструкции.

Это будет изображение, на сколько я понимаю

С каких это пор PDF у нас — изображение? Хотя, конечно, если PDF-читалка не умеет строчки переносить, тогда проблема есть.

В DOM должно быть свойтво типа .style.display, яваскрипт будет загружать передаваемый пхп файл во фрейм, удалять все элементы с этим свойством ='none', и передавть обработанный код обратно пхп через POST

Логично. Кстати, это полностью подходит под моё первое сообщение (-%Е

krigstask
Да Вы понимаете, что для удаления не тех элементов, для которых прописано dasplay: none; , а тех, которые скрываются через display: none; - то есть с учетом наследования и переопределения и корректности синтаксиса, нужно писать движок, интерпретирующий CSS, и движок, интерпретирующий HTML. Задача класса создания нового браузера не на имеющемся движке. Потому что Вам нужно узнать 1. какие в итоге классы и прочие селекторы получают какие вычисленные значения атрибутов, 2. какие элементы и в какой иерархии должны составлять DOM документа, и 3. какие селекторы действуют на какие элементы. Потом в итоге Вы получаете DOM+computedStyle, и вот уже пройдя по нему удаляете лишние элементы, а затем из полученного DOM и исходного HTML составляете HTML без удаленных элементов. Если этот алгоритм сделать аккуратно, он не будет убивать в коде все конструкции, которые не понимает - типа вставок, символов национальных кодировок, атрибутов для клиентских скриптов, и прочего.
Вы считаете это тривиальной задачей?

Al_H
Может, я неправ, но я вижу проблему так.
1. Дано:
[ul][uli]HTML-страница[/uli][uli]CSS-файл, фактически список элементов, подлежащих скрытию[/uli][/ul]
2. Примерный алгоритм действий:
[ol][oli]html-страница перегоняется в структуру, удобную для анализа (я недавно в рамках обучения Python'у загонял XML в список строк и кортежей из строк, булевых значений и словарей)[/oli][oli]обрабатывается список шаблонов элементов из CSS[/oli][oli]осуществляется проход по структуре из п. 1[/oli][oli]каждый элемент проверяется на соответствие условиям п. 2[/oli][oli]если элемент подлежит удалению, находится его граница и весь элемент удаляется[/oli][/ol]
Вот примерно так.

Добавлено Sun Mar 30 19:42:57 2008 :
Допущений, конечно, порядочно, но мне кажется, не слишком

Это смотря какие селекторы. По-моему, обычно для блокировки используются несложные конструкции.

Как раз наооборот, тут нужна вся мощь селекторов, ибо специальных атрибутов class и id мусор обычно не имеет.

С каких это пор PDF у нас — изображение? Хотя, конечно, если PDF-читалка не умеет строчки переносить, тогда проблема есть.

Написал не подумавши, сохранение страницы совсем не подойдет, т.к. на выходе у нас html книга/мануал со ссылками, множеством страниц..

•  CSS-файл, фактически список элементов, подлежащих скрытию

Там не просто список элементов, а селекторы, со всеми вытекающими...

Infocatcher

В js не очень шарю..

Logo

Как раз наооборот, тут нужна вся мощь селекторов, ибо специальных атрибутов class и id мусор обычно не имеет

Там не просто список элементов, а селекторы, со всеми вытекающими...

Хватит пугать меня уже словом «селекторы», я его не боюсь (-;Е
Покажите уже примерный файл.

Написал не подумавши, сохранение страницы совсем не подойдет, т.к. на выходе у нас html книга/мануал со ссылками, множеством страниц..

А. Ну тогда да.

Ну вот хотябы писал такие правила

DIV.subtocyel {
  display:none;
}
body>img:first-child+table{ /*такую хрень хрен обработаешь*/
  display:none;
}

Поддержка селекторов должна быть полной, хорошо еще если + 3 версии. Это вовсе не простой скрипт.

Ну да, вторая запись — дело серьёзное. Но я с необходимостью таких конструктов не сталкивался никогда. А первая — элементарно

Эт еще достаточно тривиально. Писалось чтоб это http://www.webix.ru/doc/html401 почиcтить.

HTMLChanger ищи. Может заменять любой текст по заданым вхождениям в html файлах.