v0.1.1
Six P0 correctness fixes (#4), verified against actual code before fixing, each pinned by a smoke_test.py regression:
solve_recaptcha()was crashing — callers passedapi_version=/min_score=it no longer accepted, and its body called a function (_solve_with_2captcha) that didn't exist. Restored dispatch to_solve_with_2captcha_v1/_v2.- Thousands-separator bug:
$1,234parsed as1.234. Fixed inproduct_parser._prices_in— a single separator with exactly 3 trailing digits is now read as a thousands grouping (none of the four supported currencies use 3-digit decimal subunits). - Currency corruption: the DOM discount-overlay was overwriting a correct JSON-LD
priceCurrencywith a$→USD guess, silently turning AUD/CAD/SGD/HKD/NZD rows into USD. - Exit code 3 (blocked) was unreachable from any browser engine — a challenge page parsed to 0 products and exited 4, indistinguishable from a genuinely empty category. Shared
detect_bot_challengeacross all four engines. - Hardcoded
Chrome/124.0.0.0UA in all three browser engines, now built from each browser's own real launched version at runtime. - Playwright pagination bug: raw
get_attribute("href")concatenated by hand instead ofurljoin, breaking on absolute-path hrefs.
Also: a new engine-smoke CI job installs playwright+pyppeteer so the previously-always-skipped engine-specific checks actually run in CI.
See README.md for usage, and CONTRIBUTING.md for the properties tests pin.