איך לעבוד עם CSS Selectors ב-Python

איך לעבוד עם CSS Selectors ב-Python

מנוע הבוחרים ב-Aspose.HTML FOSS עבור Python מעריך בוחרי class, id, type, attribute ו-pseudo-class עם ספציפיות לפי תקנים. מדריך זה מציג התאמת בוחרים דרך המדרג — אותו מנוע שמפעיל את 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: יצירת אלמנט שמתאים למספר בוחרים

אלמנט שנושא גם מחלקה וגם מזהה מתאים על-ידי בחירות .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 של (1,0,0) ומנצחות כללי מחבר של כל ספציפיות בחירה:

inline = el.style
inline.set_property("color", "green")
print(el.get_computed_style().get_property_value("color"))

בעיות נפוצות ותיקונים

בורר שנראה תקין אינו תואם דבר. טקסט בורר עם שגיאות תחביר נכשל בניתוח — המנוע מדווח על כך במקום לנחש; יש לבדוק את מחרוזת הבורר.

:where() מתנהג אחרת מ- :is(). זה בכוונה: :where() תורם אפס ספציפיות, :is() תורם של הארגומנט שלו.

בורר סוג מאבד באופן בלתי צפוי. בוררי סוג הם בעלי מחלקת הספציפיות הנמוכה ביותר (0,0,1); כל כלל של class או id על אותו אלמנט עולה עליהם.

שאלות נפוצות

האם אפשר לבצע שאילתת בורר ללא גיליון סגנונות?

כן — select() מעריך בורר מול עץ ישירות, ו-element_matches() בודק אלמנט בודד.

איך מחושבת ספציפיות?

specificity() מחזיר את הטופל הסטנדרטי (id, class, type) המשמש הן בשאילתות והן בקאש.

אילו פסודו-מחלקות מודליות?

קיימים טפסים מובנים עבור :is(), :where(), :has(), :not() עם ארגומנטים מורכבים, ובוררים מבניים בסגנון nth-child.

ראה גם

 עברית