Major reliability pass against the live site, verified with fresh production runs.
- Fixed: empty price / location / date / postal code on search results. Kleinanzeigen migrated its result cards to Tailwind-style utility classes, which broke the old
aditem-main--* / .ellipsis / .simpletag selectors. A fresh 400-listing run exposed price, location, postalCode, postedDate and category all at 0% coverage. Rewrote the search-card parser to the current markup (price <p>, locationOutline SVG sibling <span>, date <span> by pattern, data-dhl-promotion attribute tags) while keeping the legacy selectors as a fallback. Re-verified: title / listingId / listingUrl / price / location / postalCode now ~100%, postedDate ~93%, kilometerstand ~100% on Autos.
- Improved: vehicle / real-estate attribute capture on detail runs.
fetchPage returned as soon as the Cloudflare shell cleared, so detail pages were often captured before the attribute table rendered. Detail fetches now wait for the .addetailslist--detail table before snapshotting; the parser itself is verified correct against fully-rendered pages (all of kilometerstand / erstzulassung / kraftstoff / getriebe / leistung / fahrzeugtyp resolving cleanly). The finer specs remain data-dependent per listing, while kilometerstand (also read from the search card) is captured at ~100% on Autos.
- Fixed: garbled attribute values (e.g. a whole paragraph of description leaking into
leistung / hubraum). The plain-text regex fallback now runs only when the structured attribute table is entirely absent, and captures a bounded, self-contained value instead of swallowing prose.
- Fixed:
zimmer reporting the wrong number. The room-count matcher also matched Schlafzimmer / Badezimmer and overwrote the real total; it is now anchored to the overall Zimmer / Räume field only.
- Added: detail-page price, price type and location extraction (
#viewad-price, #viewad-locality, with its duplicated string de-duplicated). Detail-only runs are now self-sufficient for price even if a card price was missed.
- Improved: seller name extraction uses the current
.userprofile-vip widget, keeping the legacy selectors as fallback.
- Refreshed the README Output examples and field coverage tables to match the fresh verification sample exactly.
- Initial public release: Playwright (Chromium, headed) Cloudflare bypass, German numeral/date parsing, category-aware vehicle + real-estate detail schemas, seller info, image gallery,
/seite:N pagination, pay-per-event pricing.