Najczęściej zadawane pytania
Licencjonowanie i Open Source
Jakiej licencji używa Aspose.HTML FOSS dla Python?
Biblioteka jest wydana na licencji MIT. Pełny tekst jest dostarczany jako LICENSE plik w repozytorium GitHub.
Czy mogę jej używać w produktach komercyjnych?
Tak. Licencja MIT zezwala na komercyjne wykorzystanie, modyfikację, redystrybucję i sublicencjonowanie. Jedynym wymogiem jest zachowanie informacji o prawach autorskich oraz tekstu licencji przy istotnych kopiach.
Instalacja i wymagania
Jak zainstalować bibliotekę i które wersje Python są wspierane?
Zainstaluj przy użyciu git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git. Biblioteka wymaga Python 3.10 lub nowszej; bieżąca wersja to 0.1.0.
Czy istnieją jakieś natywne zależności?
Nie. Implementacja jest czystym Python — bez silnika przeglądarki, bez skompilowanych rozszerzeń — więc zachowuje się identycznie na Windows, Linux i macOS, w tym w runnerach CI oraz kontenerach.
API Usage
Jak sparsować HTML do dokumentu?
Użyj HTMLDocument.parse() dla pełnych stron lub HTMLDocument.parse_fragment() dla częściowego markupu. Do konstrukcji programistycznej, Document jest fabryką węzłów:
from aspose_html.dom import Document
doc = Document()
el = doc.create_element("div")
el.set_attribute("id", "bar")
doc.append_child(el)Jak zastosować CSS i odczytać wynikowy styl?
Parsuj tekst arkusza stylów przy użyciu CSSStyleSheet.replace_sync(), dołącz go za pomocą Document.attach_style_sheet() i odczytaj rozwiązany wynik przy użyciu Element.get_computed_style():
from aspose_html.cssom import CSSStyleSheet
sheet = CSSStyleSheet()
sheet.replace_sync("#bar { color: blue }")
doc.attach_style_sheet(sheet)
print(el.get_computed_style().get_property_value("color"))Czy kaskada obsługuje specyficzność i !important poprawnie?
Tak. Wartości obliczone podążają za specyficznością selektorów (ID wygrywa z klasą, klasa wygrywa z typem), deklaracje inline mają wyższy priorytet niż reguły autora, a !important reguły autora mają wyższy priorytet niż nie-ważne deklaracje inline. Dziedziczenie przebiega od rodzica do dziecka dla właściwości dziedziczonych.
Czy mogę używać tokenizera i budowniczego drzewa bezpośrednio?
Tak — Tokenizer.tokenize() generuje standardowy strumień tokenów, TreeBuilder.run() wykonuje konstrukcję drzewa, a parse_html() opakowuje cały potok w jednym wywołaniu.
Jak pracować z URL-ami i kodowaniami znaków?
URL.parse() i URL.can_parse() zapewniają obsługę URL-ów w stylu WHATWG z URLSearchParams dla ciągów zapytań. Dla surowych bajtów, detect_encoding() zwraca kodowanie, poziom pewności oraz zdekodowany tekst.
Znane ograniczenia
Czy istnieją jakieś API, które są dostępne, ale niezaimplementowane?
Niewielka liczba członków jest zadeklarowana, ale nie jest obecnie funkcjonalna, w tym CSSRule.type, CSSRule.css_text i HTMLImageElement.decode. Plik limitations.md w modelu wiedzy śledzi te elementy; unikaj polegania na nich.
Czy biblioteka renderuje strony lub konwertuje je do innych formatów?
Nie. Obecne wydanie koncentruje się na parsowaniu, manipulacji DOM, obliczaniu stylów CSS, strukturach układu, URL-ach i kodowaniach. Nie zawiera konwersji formatów ani renderowania obrazów/PDF.
Czy JavaScript jest wykonywany automatycznie podczas parsowania?
Nie. Parsowanie nigdy nie uruchamia skryptów. Ewaluacja skryptów jest jawna i wymaga zgody poprzez JSContext, a ładowanie modułów jest kontrolowane przez ModuleRegistry i ModuleLoadPolicy.