Có gì mới
Quy trình này hẳn bạn đã quen thuộc. Mở DevTools, tải lại trang, cuộn qua hàng tá request cho đến khi tìm thấy request chứa dữ liệu giá bạn cần, nhấp chuột phải, chọn Copy as cURL. Sau đó công việc thực sự mới bắt đầu: loại bỏ các header chỉ có ý nghĩa bên trong Chrome, viết lại cho client của riêng bạn, rồi kiểm tra xem endpoint có còn phản hồi khi request không xuất phát từ trình duyệt hay không.
Tiện ích mở rộng FourA Chrome extension, hiện ở bản beta, rút ngắn quy trình đó chỉ còn vài cú nhấp chuột. Tiện ích thêm một tab FourA bên cạnh tab Network để liệt kê các request của trang, tìm request chứa đoạn văn bản bạn nhìn thấy, và sao chép nó thành một lệnh gọi hoàn chỉnh đến Single, Proxy Finder hoặc Browser, bằng curl, Python, Node hoặc MCP. Tiện ích này cũng có popup cho phép định tuyến chính Chrome qua một trong những user thuộc proxy port của bạn.
Tiện ích hiện chưa có trên Chrome Web Store. Bạn tải về trong mục Tools tại Dashboard và cài đặt ở chế độ developer mode (Chrome, phiên bản 116 trở lên). Tiện ích hoàn toàn miễn phí; lưu lượng qua tunnel được tính vào dung lượng proxy trong gói của bạn, và các lệnh gọi thực thi từ DevTools được tính phí theo mức giá thông thường của API.
Cách thức hoạt động
Mở DevTools trên trang bạn muốn thu thập dữ liệu và chọn tab FourA. Tải lại trang, tab này sẽ liệt kê các request tương tự như tab Network, với quảng cáo và analytics được ẩn theo mặc định, cùng nút gạt This site only để lọc riêng các request của chính trang đó. Nhập giá tiền, tên sản phẩm hoặc bất kỳ văn bản nào bạn nhìn thấy vào ô Find in responses, tiện ích sẽ chỉ ra các request có response chứa nội dung đó. Đó thường là lúc bạn nhận ra trang web render dữ liệu từ một JSON endpoint mà bạn có thể gọi trực tiếp.
Chọn request, chọn engine trong mục FourA call, rồi sao chép. Dưới đây là dạng curl cho một request JSON trên một trang mua sắm (đã rút gọn: bản sao chép thực tế sẽ giữ lại mọi header mà trang đã gửi):
curl https://api.foura.ai/api/single \
-H 'X-API-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"method": "GET",
"url": "https://shop.example.com/api/products?category=coffee&page=2",
"headers": [
["accept", "application/json"],
["referer", "https://shop.example.com/coffee"],
["accept-language", "en-GB,en;q=0.9"]
],
"browser": "Chrome",
"os": "macOS",
"unblocker": true
}'
Ba điểm trong lệnh gọi đó được tính toán có chủ đích. Headers được truyền dưới dạng danh sách các cặp key-value, theo đúng thứ tự mà trang web đã gửi, đây cũng là định dạng mà Single yêu cầu. Những header Chrome tự tạo cho kết nối riêng của nó (host, content-length, accept-encoding, connection và một vài header khác) đều bị loại bỏ, vì việc sao chép chúng sẽ làm hỏng bất kỳ client nào gửi lệnh gọi tiếp theo. Đồng thời, browser cùng với os yêu cầu browser profile khớp với phiên bản Chrome bạn đang dùng. Phiên bản được cố tình lược bỏ: lệnh gọi sẽ nhận phiên bản mới nhất mà chúng tôi hỗ trợ thay vì bị từ chối do yêu cầu một phiên bản không có sẵn.
Định dạng MCP bao gồm tên công cụ (foura_single) theo sau bởi cùng một đoạn JSON, sẵn sàng cho agent giao tiếp với MCP server của chúng tôi.
Tiếp theo là hai nút bấm. Open in the playground tải lệnh gọi vào Dashboard Playground, tự động chọn đúng API key nếu đó là key của bạn. Run through FourA thực hiện gửi lệnh và hiển thị song song "The browser got" cùng "FourA got", giúp bạn đối chiếu kết quả trả về của chúng tôi với trang web trước khi viết bất kỳ dòng code nào.
Tác động
Quy trình thủ công đã có rất nhiều tài liệu hướng dẫn. Bài hướng dẫn của ScrapingBee mất tới năm bước chỉ để trích xuất lệnh cURL từ Chrome, và lưu ý rằng thao tác sao chép này sẽ giữ lại toàn bộ header và cookie mà trình duyệt đã gửi. Đó là điểm bắt đầu của hầu hết các scraper. Nhưng đó cũng mới chỉ là một nửa công việc, vì bản sao đó chỉ chứng minh request chạy được từ trình duyệt của bạn chứ không phải từ nơi khác.
Tab FourA xử lý trọn vẹn cả hai phần việc ở cùng một nơi. Bạn tìm request dựa trên dữ liệu trả về thay vì đoán mò từ URL, nhận được lệnh gọi đúng định dạng mà API yêu cầu, và một cú nhấp chuột sẽ cho biết request có chạy ổn định từ phía chúng tôi hay không. Điều này phát huy hiệu quả rõ nhất trên những trang web mà dữ liệu được tải qua một request có URL hoàn toàn không mang ý nghĩa nhận diện.
Chúng tôi chưa có số liệu cụ thể về thời gian tiết kiệm được. Đây là bản beta, và thước đo chuẩn xác nhất chính là dự án tiếp theo của bạn.
Dành cho người dùng nâng cao
Chuyển engine sang Proxy Finder, bảng điều khiển sẽ bọc lại cùng một request đó và cung cấp tùy chọn Exit country:
{
"request": {
"method": "GET",
"url": "https://shop.example.com/api/products?category=coffee&page=2",
"headers": [["accept", "application/json"]],
"unblocker": true
},
"exitCountries": ["DE"]
}
exitCountries là một allowlist nghiêm ngặt. Request không bao giờ tự động chuyển sang quốc gia khác, và quốc gia phản hồi sẽ được trả về dưới dạng exitCountry. Đây là tính năng theo gói dịch vụ, do đó gói không có tính năng định vị quốc gia sẽ phản hồi từ chối kèm thông báo rõ ràng.
Browser có cấu trúc khác, vì nó mở trang web thay vì gửi request. Nó nhận header dưới dạng object, chuyển header Cookie của trang thành danh sách cookie theo phạm vi host, đồng thời bỏ qua user-agent cùng các header client-hint, vì engine sẽ tự gửi các giá trị riêng (khi bật tùy chọn profile, nó sẽ gửi user agent của cửa sổ này thay thế). Nó chỉ phát lại lệnh GET không có body. Lệnh POST từ form tìm kiếm thuộc về Single, nơi JSON body được truyền dưới dạng object và bất kỳ dữ liệu nào khác được giữ nguyên dạng chuỗi chính xác mà trang đã gửi.
Nhấp chuột phải vào bất kỳ request nào để thấy các tùy chọn sao chép tương tự cùng với Copy URL và Copy response. API key dùng cho các lần chạy nằm trong Settings của tab và được lưu cho đến khi đóng Chrome, trừ khi bạn chọn Keep the key on this computer.
Một lưu ý quan trọng. Lệnh gọi được sao chép kèm cookie sẽ phát lại toàn bộ phiên đăng nhập của bạn. Hãy bảo mật nó như mật khẩu, không đưa vào ticket hỗ trợ, kênh chat hoặc repo công khai.
Giao diện popup cũng có điểm đáng chú ý. Nó đo lường địa chỉ mà trang web nhìn thấy qua tunnel thay vì đọc từ cấu hình của bạn, và khi địa chỉ đó trùng với địa chỉ thực của bạn, nó sẽ hiển thị Not routed. Khi biểu tượng chuyển sang màu đỏ kèm một con số, proxy đã từ chối bấy nhiêu kết nối trong phút vừa qua, và popup sẽ giải thích lý do. Các username options phía sau trang Location của nó hoàn toàn trùng khớp với tài liệu cổng proxy.
Bước tiếp theo
Extension vẫn ở giai đoạn beta, được cài đặt từ Dashboard, cho đến khi chúng tôi hoàn thiện và chưa ấn định ngày phát hành trên Chrome Web Store. Chrome là trình duyệt duy nhất được hỗ trợ xây dựng và kiểm thử. setup guide mô tả những gì đang có hiện tại; các thay đổi tiếp theo phụ thuộc vào những gì bạn gặp phải khi áp dụng tab FourA vào công việc thực tế.
Vì vậy, lần tới khi một trang web gây khó khăn cho bộ parser của bạn, hãy mở DevTools trước khi mở mã nguồn HTML. Trình thu thập dữ liệu tiết kiệm nhất thường là trình gọi lại chính request mà trang web đã thực hiện sẵn.