איך לעבוד עם 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.