Часто задаваемые вопросы

Часто задаваемые вопросы

Лицензирование и открытый исходный код

Какую лицензию использует Aspose.HTML FOSS для Python?

Библиотека распространяется под лицензией MIT. Полный текст поставляется как LICENSE файл в репозитории GitHub.

Могу ли я использовать её в коммерческих продуктах?

Да. Лицензия MIT разрешает коммерческое использование, модификацию, перераспределение и сублицензирование. Единственное требование — сохранять уведомление об авторском праве и текст лицензии в значимых копиях.

Установка и требования

Как установить библиотеку и какие версии Python поддерживаются?

Установите с помощью git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git. Библиотека требует Python 3.10 или новее; текущий релиз — 0.1.0.

Есть ли какие-либо нативные зависимости?

Нет. Реализация полностью на Python — без движка браузера, без скомпилированных расширений — поэтому она ведёт себя одинаково на Windows, Linux и macOS, включая CI-раннеры и контейнеры.

API Usage

Как разобрать HTML в документ?

Используйте HTMLDocument.parse() для полных страниц или HTMLDocument.parse_fragment() для частичной разметки. Для программного построения Document является фабрикой узлов:

from aspose_html.dom import Document
doc = Document()
el = doc.create_element("div")
el.set_attribute("id", "bar")
doc.append_child(el)

Как применить CSS и прочитать полученный стиль?

Разберите текст таблицы стилей с помощью CSSStyleSheet.replace_sync(), прикрепите его с помощью Document.attach_style_sheet() и считайте разрешённый результат с помощью Element.get_computed_style():

from aspose_html.cssom import CSSStyleSheet
sheet = CSSStyleSheet()
sheet.replace_sync("#bar { color: blue }")
doc.attach_style_sheet(sheet)
print(el.get_computed_style().get_property_value("color"))

Корректно ли каскад обрабатывает специфичность и !important?

Да. Вычисленные значения учитывают специфичность селекторов (ID важнее класса, класс важнее типа), встроенные декларации превосходят правила автора, а !important правила автора превосходят неважные встроенные декларации. Наследование происходит от родителя к потомку для наследуемых свойств.

Могу ли я использовать токенизатор и построитель дерева напрямую?

Да — Tokenizer.tokenize() генерирует поток токенов стандарта, TreeBuilder.run() выполняет построение дерева, а parse_html() оборачивает весь конвейер в один вызов.

Как работать с URL и кодировками символов?

URL.parse() и URL.can_parse() предоставляют обработку URL в стиле WHATWG с URLSearchParams для строк запроса. Для необработанных байтов detect_encoding() возвращает кодировку, степень уверенности и декодированный текст.

Известные ограничения

Есть ли какие-то API, которые присутствуют, но не реализованы?

Объявлено небольшое количество членов, но они пока не работают, включая CSSRule.type, CSSRule.css_text и HTMLImageElement.decode. Файл limitations.md в модели знаний отслеживает их; избегайте полагаться на них.

Рендерит ли библиотека страницы или конвертирует их в другие форматы?

Нет. Текущий релиз сосредоточен на парсинге, манипуляциях с DOM, вычислении стилей CSS, структурах разметки, URL и кодировках. Он не включает конвертацию форматов и рендеринг изображений/PDF.

Выполняется ли JavaScript автоматически во время парсинга?

Нет. Парсинг никогда не запускает скрипты. Оценка скриптов происходит явно и только по запросу через JSContext, при этом загрузка модулей контролируется ModuleRegistry и ModuleLoadPolicy.

См. также:

 Русский