Як працювати з CSS селекторами у Python
Селекторний движок у Aspose.HTML FOSS для Python оцінює селектори класу, id, типу, атрибуту та псевдокласу з урахуванням специфічності за стандартами. Цей посібник демонструє відповідність селекторів через каскад — той самий движок, який живить select() та element_matches() — використовуючи pip для встановлення.
Покроковий посібник
Крок 1: Встановіть пакет
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .Крок 2: Імпортуйте необхідні класи
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheetКрок 3: Створіть елемент, який відповідає кільком селекторам
Елемент, який має одночасно клас і id, збігається з селекторами .foo, #bar та div одночасно:
doc = Document()
el = doc.create_element("div")
el.set_attribute("class", "foo")
el.set_attribute("id", "bar")
doc.append_child(el)Крок 4: Дайте специфічності вирішити
Прикріпіть суперечливі правила — селектор ID (1,0,0) переважає селектор класу (0,1,0):
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"))Крок 5: Перезаписати за допомогою Inline-оголошення
Inline-оголошення мають пріоритет (1,0,0) на рівні inline і переважають правила автора будь-якої специфічності селектора:
inline = el.style
inline.set_property("color", "green")
print(el.get_computed_style().get_property_value("color"))Поширені проблеми та виправлення
Селектор, який виглядає правильним, нічого не збігається. Текст селектора з синтаксичними помилками не проходить парсинг — движок повідомляє про це, а не вгадує; перевірте рядок селектора.
:where() поводиться інакше, ніж :is(). Так задумано: :where() додає нульову специфічність, :is() додає специфічність його аргументу.
Типовий селектор неочікувано програє. Типові селектори мають найнижчий клас специфічності (0,0,1); будь-яке правило класу або id на тому ж елементі має вищий пріоритет.
Поширені запитання
Чи можу я виконати запит селектора без таблиці стилів?
Так — select() оцінює селектор безпосередньо проти дерева, а element_matches() тестує окремий елемент.
Як обчислюється специфічність?
specificity() повертає стандартний кортеж (id, class, type), який використовується як у запитах, так і в каскаді.
Які псевдокласи змодельовані?
Для :is(), :where(), :has() та :not() існують структуровані форми зі складними аргументами та селекторами структури в стилі nth-child.