Vấn đề crawling data của Zalo (sưu tầm)

Câu hỏi này mình copy của một bạn viết trên nhóm Lập trình Python rồi đăng lại với mục đích sưu tầm

Em đang viết một tool bằng Python để tự động tải ảnh từ một group chat Zalo về máy tính ngay khi có người gửi ảnh mới vào

Hiện tại em đang phân vân giữa 2 hướng tiếp cận sau:

  1. Dùng Selenium / Playwright thao tác trên Zalo Web: Hướng này có vẻ an toàn và dễ kiểm soát nhất. Nhưng mình hơi ngại việc Zalo Web update cấu trúc DOM liên tục thì maintain sẽ cực, chưa kể bài toán xử lý để giữ session đăng nhập lâu dài không bị văng.
  2. Dùng các Unofficial API (như zalo-js…): Cách này code gọn, bắt event ngon và chạy ngầm hoàn hảo như một con bot thực thụ. Nhưng mình có nghe nói dạo này Zalo quét rất gắt tool bên thứ 3, rủi ro bị khóa tài khoản là khá cao.

Các bác cho mình hỏi:

  • Trong 2 cách trên thì thực tế hiện nay cách nào đang “sống thọ” và ít rủi ro nhất ạ?
  • Có bác nào từng xử lý case tương tự có thể share cho mình keyword, hướng giải quyết, hoặc một thư viện nào êm hơn không?
  • Nếu đi theo hướng Selenium cào Zalo Web, có trick nào để hạn chế bị văng session hay bị hệ thống đánh dấu bất thường không ạ?

    À nếu dùng zalo api for dev thì em đọc document thì có vẻ nó không hỗ trợ cho ý tưởng của em

Trả lời

Minh Trang: Em thấy ý tưởng cũng khá lạ ạ, em người mới nên cũng thắc mắc nếu mình đã ở trong group thì thường sau mỗi lần gửi, zalo cũng tự tải về cho mình mà ạ:< tool này giúp tối ưu hoá về mặt nào nữa vậy ạ.

Quảng cáo

Ủng hộ website

Phong Phạm: em đang muốn phân loại ai up ảnh nào kiểu vậy, cái tự tải của zalo nó ko hỗ trợ được

Người ẩn danh: Dùng n8n với node zalo kéo thả chưa tới 5p là xong

Nguyễn Công Sơn: đồng ý, cách này dễ làm, đơn giản, nhưng thực chất là dùng thư viện zalo js để làm, vẫn có khả năng ăn ban như cách số 2 mà b thớt nói. Tuy nhiên t làm cho nhiều khách rùi thì chưa thấy ai bị ban acc cả. 1 điểm lưu ý nữa là thằng zalo khi gửi 1 tin nhắn chứa nhiều ảnh, nó sẽ trigger nhiều lần, vậy cần xử lý case đó để match về tin nhắn gốc.

Linh Cherry: Bạn dùng chrome rồi viết extension bắt request là an toàn nhất nhé

Phạm Trung Hiếu: cái này hay này , nhưng hình như Zalo có API hỗ trợ vụ này thì phải

Phong Phạm: em có đọc docs về Zalo OA thì nó không có hỗ trợ bác ạ, nếu có thì mình sài của nó luôn cho khỏe rùi. Zalo cá nhân khác zalo OA đó ạ

Tờ Ri: vẫn selenium nhưng mở port porfile chính , chỉ đọc network respone , nhớ patch mấy properties bị leak. ez hơn thì viết js script chạy tiêm vào trang luôn , nhớ có mấy extension cho tải full ảnh load dc đấy

Tân Tân: – chống “văng” session: dùng kỹ thuật Warmer. Chạy theo dạng schedule.

– Selenium ?. Vứt cái thứ cổ lỗ đó đi. Hãy dùng DrissionPage. Thư viện đó dùng CDP, và nó có MixPage cho phép đổi qua dùng “requests” crawl thay vì cả trình duyệt nặng nề

ý tưởng là : auth trình duyệt lấy token, xong soi xem nó load message by group/user kiểu gì. Ta load mỗi content thôi, không phụ thuộc DOM hay UI struct.

còn nếu bắt buộc trình duyệt, thì hãy hệ thống hoá lại DOM structure. Loại bỏ những elem thừa, bắt buộc nó phải có cấu trúc như mình muốn (dùng Userscript can thiệp sau khi zalo load xong, hoặc `Observer`)

tập trung vào khai thác cái này trước nè: xem ServiceWorker của nó (cái bắn thông báo trình duyệt ý). Nó detect new message kiểu gì. Chỗ đó có thể khai thác được

Phong Phạm: em cảm ơn ý tưởng của a, chi tiết quá

Add Comment