Mục lục
🔴 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.