Harthliving OTA · bản chữ cho AI · dựng từ vault (nguồn sửa lần cuối 29/09/2026 09:28) · mục lục: https://harthliving-ota.pages.dev/ai/index.txt URL (HTML): https://harthliving-ota.pages.dev/library/tech/chrome-profile-rule/ [Tổng quan](https://harthliving-ota.pages.dev/) › [Dữ liệu & báo cáo](https://harthliving-ota.pages.dev/library/) › [Tài liệu kỹ thuật](https://harthliving-ota.pages.dev/library/tech/) # Chrome nào được dùng để làm việc ## Chrome nào được dùng để làm việc Nguồn: `10-rules/chrome-profile-rule.md` ### 🔴 Chỉ làm việc trên Chrome của tài khoản Huy **User chốt 24/09/2026.** Mọi thao tác đọc OTA (Booking · Airbnb · Agoda · PriceLabs) phải chạy trên profile Chrome đang đăng nhập **Huy · huyngstr@gmail.com** (avatar Harth Living). Máy này có nhiều profile Chrome khác — Brandee · Duy · Hanh · Hiếu · Living · Trọng — **không dùng bất kỳ profile nào trong số đó.** #### Vì sao có luật này Các profile khác đăng nhập tài khoản khác, nên vừa không thấy đúng listing, vừa có nguy cơ thao tác nhầm trên tài sản của người khác. #### 🔴 Bẫy lớn nhất: tab mới mở SAI PROFILE, không phải hết phiên Một `user-data-dir` chứa nhiều profile; mỗi profile là một `browserContextId`. **`Target.createTarget` luôn mở ở context MẶC ĐỊNH** — và context mặc định ở máy này **không phải** profile Huy. Nên tab mới chưa bao giờ đăng nhập Booking, mọi trang bị đá về `sign-in`, **trông y hệt phiên hết hạn**. Truyền `browserContextId` của profile cũng không được: `createTarget` chỉ nhận context do chính nó tạo — trả `Failed to find browser context with id …`. **Cách duy nhất chạy được:** nhờ một tab đang đăng nhập mở tab con bằng `window.open(url,'_blank')` với `userGesture: true`. Tab con thừa hưởng đúng profile. `# so hai giá trị này; khác nhau là KHÔNG được tạo tab trần curl -s -X POST http://127.0.0.1:9333/cdp -H 'content-type: application/json' \ -d '{"method":"Target.getBrowserContexts"}' # defaultBrowserContextId curl -s -X POST http://127.0.0.1:9333/cdp -H 'content-type: application/json' \ -d '{"method":"Target.getTargets"}' # browserContextId của tab extranet ` Đã sửa trong `chrome-grab.mjs`, `ota-read-booking-funnel.mjs`, `ota-read-booking-reviews.mjs` (24/09/2026). #### Bẫy đi kèm: nhiều tab = nhiều token `ses` Extranet cấp một token `ses=` cho mỗi phiên. Mở nhiều tab qua nhiều lần đăng nhập thì các tab mang **token khác nhau**, và token cũ **đã chết** nhưng URL vẫn còn đó. `chrome-grab.mjs` lấy token của **tab đầu tiên** tìm thấy — nếu đó là tab cũ thì mọi lệnh sẽ bị đá về trang đăng nhập, trông y hệt "hết phiên". Đã dính 24/09/2026. **Cách tránh:** lấy token của tab **mới nhất**, hoặc đóng hết tab extranet cũ trước khi chạy. `scripts/ota-read-booking-funnel.mjs` đã làm đúng (hàm `session()` lấy token cuối danh sách). #### Kiểm nhanh trước khi chạy lô lớn `curl -s -X POST http://127.0.0.1:9333/cdp -H 'content-type: application/json' \ -d '{"method":"Target.getTargets"}' | grep -o 'ses=[a-f0-9]*' | sort -u ` Ra nhiều hơn một token là phải dọn tab trước.