Вступ
Більшість інструментів HTML зупиняються на дереві. Aspose.HTML FOSS для Python йде на один рівень далі: він реалізує модель об’єктів CSS, тому таблиця стилів — це не лише текст, який ви переносите — вона бере участь у реальній каскаді, і кожен елемент може сказати вам, який стиль він фактично отримав.
Це глибоке занурення охоплює рівень CSSOM: парсинг таблиць стилів за допомогою CSSStyleSheet, редагування декларацій через CSSStyleDeclaration та читання результатів назад за допомогою Element.get_computed_style() — включаючи те, як взаємодіють специфічність, !important та успадкування. Бібліотека розміщена на PyPI як aspose-html-foss, має ліцензію MIT і є чистим Python (3.10+), що робить її практичною для перевірки стилів у тестових наборах та сервісах, де безголовий браузер був би зайвим.
Ключові можливості
Парсинг та підключення таблиць стилів
CSSStyleSheet.replace_sync() парсить текст таблиці стилів на місці; Document.attach_style_sheet() реєструє таблицю у документі, щоб вона брала участь у каскаді. Таблиці можна також будувати правило за правилом за допомогою insert_rule(), add_rule() та remove_rule(), або створювати з тексту за допомогою from_text():
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheet
doc = Document()
sheet = CSSStyleSheet()
sheet.replace_sync("div { color: red }")
doc.attach_style_sheet(sheet)
Специфічність визначає переможця
Коли кілька правил націлені на один і той же елемент, обчислене значення слідує специфічності селектора. Селектор ID (специфічність 1,0,0) переважає селектор класу (0,1,0):
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheet
doc = Document()
el = doc.create_element("div")
el.set_attribute("class", "foo")
el.set_attribute("id", "bar")
doc.append_child(el)
sheet = CSSStyleSheet()
sheet.replace_sync(".foo { color: red } #bar { color: blue }")
doc.attach_style_sheet(sheet)
print(el.get_computed_style().get_property_value("color"))
Вбудовані декларації та CSSStyleDeclaration
Властивість style кожного елемента є живим CSSStyleDeclaration. Декларації редагуються за допомогою set_property() і переглядаються за допомогою get_property_value(), get_property_priority() та item(). Вбудовані декларації мають специфічність (1,0,0), тому вони переважають правила типу та класу у авторських таблицях стилів:
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheet
doc = Document()
el = doc.create_element("div")
doc.append_child(el)
sheet = CSSStyleSheet()
sheet.replace_sync("div { color: red }")
doc.attach_style_sheet(sheet)
inline = el.style
inline.set_property("color", "blue")
print(el.get_computed_style().get_property_value("color"))
Важливість переважає специфічність
!important змінює звичний результат: правило автора, позначене !important, переважає неважливу вбудовану декларацію, незалежно від специфічності. Пріоритети також можна встановлювати програмно за допомогою set_property_priority():
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheet
doc = Document()
el = doc.create_element("div")
doc.append_child(el)
sheet = CSSStyleSheet()
sheet.replace_sync("div { color: red !important }")
doc.attach_style_sheet(sheet)
inline = el.style
inline.set_property("color", "blue")
print(el.get_computed_style().get_property_value("color"))
Наслідування та ключове слово inherit
Наслідувані властивості, такі як color, передаються від батька до дитини, якщо у дитини немає власного локального значення — локальне правило завжди перекриває успадковане. Явне ключове слово inherit копіює обчислене значення батька, а на кореневому елементі без батька воно повертається до початкового значення властивості:
from aspose_html.dom import Document
doc = Document()
el = doc.create_element("div")
doc.append_child(el)
inline = el.style
inline.set_property("color", "inherit")
print(el.get_computed_style().get_property_value("color"))
Швидкий старт
Встановити з PyPI:
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .Вирішити тристоронній конфлікт — правило класу проти правила ID проти інлайн-оголошення:
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheet
doc = Document()
el = doc.create_element("div")
el.set_attribute("class", "foo")
el.set_attribute("id", "bar")
doc.append_child(el)
sheet = CSSStyleSheet()
sheet.replace_sync(".foo { color: red } #bar { color: green }")
doc.attach_style_sheet(sheet)
inline = el.style
inline.set_property("color", "blue")
print(el.get_computed_style().get_property_value("color"))
Відкритий код та ліцензування
Aspose.HTML FOSS для Python розповсюджується під ліцензією MIT — комерційне використання, модифікація та поширення дозволені. Джерело розташоване на GitHub і випуски доставляються до PyPI як aspose-html-foss.