- ly-com: read Vue ref via stable .value with _rawValue fallback
rather than the brittle internal _rawValue path.
- wehotel: ancestor walk now identifies the hotel-name anchor by
identity/innerText instead of an href-based negation against text
(查看详情 lives on the link body, not in href), which previously
let the loop stop on the detail anchor itself.
- ctrip: raise an explicit error when the destination input or 搜索
button isn't found, instead of dereferencing None and crashing
with a confusing TypeError.
Field-tested 2026-04-29. First batch covering Chinese hotel-booking sites:
- ly-com (同程旅行): hotels.md — prices gated behind login; Nuxt SSR
state holds metadata. Documents the ¥? placeholder pattern, Nuxt data
key randomization, login flow via passport.ly.com.
- ctrip (携程): hotels.md — anonymous price extraction works *only*
with the canonical 6-param URL schema. Documents the schema gate,
homepage-form fallback, phantom-¥ regex trap, no-href-on-cards
reality.
- wehotel (锦江): hotels.md — fully anonymous; covers all Jin Jiang
sub-brands (J酒店/锦江/维也纳/7天/IU etc). Documents the
inconsistent checkinDate vs checkInDate capitalization between list
and detail URLs.
All three include URL patterns, list/detail extraction JS, traps, and
quick-start snippets per the SKILL.md "durable site map" guidance.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>