วิธีทำงานกับ CSS Selectors ใน Python

วิธีทำงานกับ CSS Selectors ใน Python

เอนจินตัวเลือกใน Aspose.HTML FOSS สำหรับ Python ประเมิน class, id, type, attribute, และ pseudo-class ด้วยความจำเพาะตามมาตรฐาน คู่มือนี้แสดงการจับคู่ตัวเลือกผ่าน cascade — เอนจินเดียวกันที่ขับเคลื่อน 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: ให้ Specificity ตัดสิน

แนบกฎที่แข่งขันกัน — ตัวเลือก 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: แทนที่ด้วยการประกาศแบบอินไลน์

การประกาศแบบอินไลน์มีระดับความสำคัญ (1,0,0) ระดับอินไลน์และชนะกฎของผู้เขียนที่มีความจำเพาะของตัวเลือกใดก็ได้:

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

ปัญหาที่พบบ่อยและการแก้ไข

ตัวเลือกที่ดูเหมือนถูกต้องไม่ตรงกับอะไรเลย. ข้อความตัวเลือกที่มีข้อผิดพลาดทางไวยากรณ์ไม่สามารถพาร์เซได้ — ตัวเอนจินจะรายงานข้อผิดพลาดแทนการเดา; ตรวจสอบสตริงของตัวเลือก.

:where() ทำงานแตกต่างจาก :is(). นั่นเป็นการออกแบบไว้เช่นนั้น: :where() ให้ความจำเพาะศูนย์, :is() ให้ความจำเพาะของอาร์กิวเมนต์ของมัน.

ตัวเลือกชนิด (type selector) สูญเสียโดยไม่คาดคิด. ตัวเลือกชนิดมีระดับความจำเพาะต่ำสุด (0,0,1); กฎคลาสหรือ id ใดๆ บนองค์ประกอบเดียวกันจะเหนือกว่ามัน.

คำถามที่พบบ่อย

ฉันสามารถรันคิวรี selector โดยไม่ต้องใช้ stylesheet ได้หรือไม่?

ใช่ — select() ประเมิน selector กับ tree โดยตรง, และ element_matches() ทดสอบองค์ประกอบเดียว.

Specificity คำนวณอย่างไร?

specificity() คืนค่า tuple มาตรฐาน (id, class, type) ที่ใช้โดยทั้งคิวรีและ cascade.

มี pseudo-classes ใดบ้างที่ถูกจำลอง?

มีรูปแบบที่มีโครงสร้างสำหรับ :is(), :where(), :has(), :not() พร้อมอาร์กิวเมนต์ที่ซับซ้อน และตัวเลือกเชิงโครงสร้างสไตล์ nth-child.

ดูเพิ่มเติม

 ภาษาไทย