Tự động hóa trong Octo Browser: cắt giảm chi phí thời gian
10/4/25


Artur Hvalei
Technical Support Specialist, Octo Browser
Làm việc với một số lượng lớn hồ sơ trong một trình duyệt chống phát hiện đòi hỏi nỗ lực, thời gian và tài nguyên đáng kể — ngay cả khi có UX được thiết kế kỹ. Càng quản lý nhiều hồ sơ, bạn càng gặp nhiều hành động lặp đi lặp lại chiếm nhiều giờ làm việc của bạn. Tuy nhiên, nhiều quy trình này có thể được tự động hóa, tiết kiệm rất nhiều thời gian cho bạn.
Các khách hàng sử dụng API của chúng tôi nói rằng đó là một trong những cách tốt nhất so với các đối thủ cạnh tranh. Thực hiện các cú nhấp chuột, theo liên kết, thêm dữ liệu — bất kỳ thao tác tiêu chuẩn nào cũng có thể được tăng tốc đáng kể. Trong bài viết này, chúng tôi sẽ chỉ cho bạn cách thức.
Làm việc với một số lượng lớn hồ sơ trong một trình duyệt chống phát hiện đòi hỏi nỗ lực, thời gian và tài nguyên đáng kể — ngay cả khi có UX được thiết kế kỹ. Càng quản lý nhiều hồ sơ, bạn càng gặp nhiều hành động lặp đi lặp lại chiếm nhiều giờ làm việc của bạn. Tuy nhiên, nhiều quy trình này có thể được tự động hóa, tiết kiệm rất nhiều thời gian cho bạn.
Các khách hàng sử dụng API của chúng tôi nói rằng đó là một trong những cách tốt nhất so với các đối thủ cạnh tranh. Thực hiện các cú nhấp chuột, theo liên kết, thêm dữ liệu — bất kỳ thao tác tiêu chuẩn nào cũng có thể được tăng tốc đáng kể. Trong bài viết này, chúng tôi sẽ chỉ cho bạn cách thức.
Nội dung
Nơi nào cần Tự động hóa Trình duyệt nhất?
Thực hiện các hành động lặp đi lặp lại bằng tay tiêu tốn thời gian mà bạn có thể dành cho các công việc quan trọng hơn. Ngoài việc tiết kiệm thời gian và tập trung của bạn, tự động hóa cũng giúp ngăn ngừa sai sót. Lặp lại cùng một hành động hàng trăm lần làm cho sai sót gần như không thể tránh khỏi, ví dụ: thiết lập sai thẻ hoặc khởi chạy các hồ sơ mà không gán proxy đúng. Không giống như con người, thuật toán không mắc những sai lầm như vậy. Với một kịch bản được kiểm thử tốt, bạn có thể chắc chắn rằng mọi thứ được thực thi một cách chính xác.
Ngoài việc giải quyết các nhiệm vụ chung, tự động hóa còn đặc biệt hữu ích trong các lĩnh vực sau:
Tiếp thị liên kết: Tự động hóa tạo hồ sơ hàng loạt và cài đặt, bao gồm cả cookies, proxy, tiện ích mở rộng, và trang bắt đầu.
Trang trại tài khoản: Nhanh chóng tạo tài khoản trong các khu vực địa lý yêu cầu và chuẩn bị chúng tự động. Xuất tất cả các hồ sơ trong danh sách xuất.
Scraping web: Điều chỉnh tần suất yêu cầu mỗi IP đến mức an toàn, xoay vòng proxy và chỉnh sửa dấu vân tay trong trường hợp bị chặn.
E-commerce: Phát triển kịch bản để tự động hóa các công việc tốn nhiều công sức và an toàn trích xuất dữ liệu đối thủ cạnh tranh.
Đánh bạc và săn tiền thưởng: Đơn giản hoá việc tạo hồ sơ với vị trí địa lý và tham số dấu vân tay cần thiết. Tự động hóa các hành động hàng loạt qua các tài khoản để vượt qua các giới hạn đặt cược.
Bắt đầu với API
Chúng tôi đã phân tích các cuộc gọi API từ người dùng và nhận thấy rằng nhiều nhóm đang tích cực triển khai kịch bản để quản lý các hồ sơ, qua đó thay đổi các phương pháp tiếp cận thông thường đối với tính đa tài khoản. Nhiều lãnh đạo của các nhóm tiếp thị liên kết lớn nhấn mạnh sự thuận tiện của API của chúng tôi là một trong những lợi thế chính của Octo so với đối thủ.
API hiện tại của chúng tôi cho phép bạn tạo hồ sơ với các dấu vân tay kỹ thuật số bạn cần, thêm proxy, gán thẻ, cũng như bắt đầu và dừng các kịch bản tự động bằng bất kỳ khung tự động hóa trình duyệt nào. Bạn cũng có thể làm việc với các hồ sơ của mình trong chế độ lai, tận dụng tối đa sự kết hợp giữa những lợi ích của tự động hóa với sự điều chỉnh chính xác mà điều khiển thủ công truyền thống của các tài khoản của bạn cho phép.

Bạn có thể tìm thấy token API của mình trong Cài đặt bổ sung của Tài khoản chủ Octo Browser
Token API của bạn
Octo Browser cung cấp cho bạn quyền truy cập vào token API của bạn bắt đầu với Gói đăng kí Base trở lên. Giới hạn cuộc gọi API của bạn được xác định bởi gói đăng kí của bạn. Nếu bạn có Gói đăng kí Advanced, bạn có thể tăng thêm giới hạn API của mình lên 1.000 yêu cầu mỗi phút (RPM) và 50.000 yêu cầu mỗi giờ (RPH). Để có giới hạn cao hơn nữa, vui lòng liên hệ Dịch vụ khách hàng.
Tầng đăng kí | RPM | RPH |
|---|---|---|
Base | 50 | 500 |
Team | 100 | 1500 |
Advanced | 200 (+800) | 3000 (+47 000) |
Lựa chọn ngôn ngữ lập trình
Chủ đề về lựa chọn ngôn ngữ lập trình quá rộng để có thể bao quát tất cả các kết hợp ngôn ngữ và thư viện có thể có tại đây. Trong ví dụ của chúng tôi, chúng tôi sẽ sử dụng Node.js + Axios, vì chúng tôi có kinh nghiệm với công nghệ này. Các ngôn ngữ khác, chẳng hạn như C hoặc C#, có thể nhanh hơn, nhưng mỗi ngôn ngữ có các đặc điểm riêng, các điểm nhấn và các tình huống sử dụng riêng. Bạn có thể chọn bất kỳ ngôn ngữ nào dựa trên kinh nghiệm của bạn.
Sử dụng AI để viết lại mã
Chúng tôi yêu thích tự động hóa và luôn cố gắng tối ưu hóa công việc của mình, vì vậy chúng tôi sử dụng AI để viết lại mã ngôn ngữ cần thiết. Rất đơn giản: bạn có thể yêu cầu ChatGPT chuyển đổi mã cho bạn bằng cách sử dụng đoạn lời nhắc sau: Chuyển đổi tập lệnh này từ Node.js với Axios sang Python với thư viện Requests.
//modules const axios = require('axios'); //here is config. Paste your Octo API Token here and you can modify this for your personal needs const config = { octo_token: "OCTO_API_TOKEN", octo_api_base_url: "https://app.octobrowser.net/api/v2/automation/", data: { extensions: ['aapfglkgnhmiaabhiijkjpfmhllaodgp@4.2.3'], bookmarks: [{ "name": "google", "url": "https://google.com" }, { "name": "facebook", "url": "https://facebook.com" }], start_pages: ["https://google.com", "https://facebook.com"] } } const OCTO_REMOTE_API = axios.create({ baseURL: config.octo_api_base_url, timeout: 10000, headers: { 'X-Octo-Api-Token': config.octo_token, 'Content-Type': "application/json" } }); //functions async function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms * 1000)); } async function check_limits(response) { let rpm = response.headers['x-ratelimit-remaining']; let rph = response.headers['x-ratelimit-remaining-hour']; if (rpm < 10) { console.log("Waiting a minute..."); await sleep(60); } if (rph < 10) { console.log("Waiting an hour..."); await sleep(3600); } } async function get_total_profiles(){ const response = await OCTO_REMOTE_API.get('/profiles?page=0&page_len=10'); const total_profiles = response.data.total_count; const total_pages = Math.ceil(response.data.total_count/100); console.log(`Total Profiles: ${total_profiles}\nTotal Pages: ${total_pages}`); await check_limits(response); return total_pages; } async function get_all_profiles_uuids(total_pages){ let profiles = []; for (let i = 0; i < total_pages; i++) { let response = await OCTO_REMOTE_API.get(`/profiles?page=${i}&page_len=100`); await check_limits(response); profiles.push(...response.data.data); } return profiles; } async function patch_all_profiles(profiles){ let updated = []; let not_updated = []; for (let profile of profiles) { try{ const response = await OCTO_REMOTE_API.patch(`/profiles/${profile.uuid}`, config.data); await check_limits(response); updated.push(profile); console.log(`Successfully updated ${profile.uuid}`); } catch (error) { not_updated.push(profile); console.error(`ERROR: Can't patch profile ${profile.uuid}`); } } return [updated, not_updated]; } //main process (async () => { const total = await get_total_profiles(); const profiles = await get_all_profiles_uuids(total); const [updated, not_updated] = await patch_all_profiles(profiles); console.log(`Finished process:\nUpdated: ${updated.length}\nNot updated: ${not_updated.length}`); })();

Cho ChatGPT xử lý các đoạn mã
Tất nhiên, đây là tập lệnh Python tương đương sử dụng thư viện Requests:
import requests import math import time # Config config = { "octo_token": "OCTO_API_TOKEN", "octo_api_base_url": "https://app.octobrowser.net/api/v2/automation/", "data": { "extensions": ["aapfglkgnhmiaabhiijkjpfmhllaodgp@4.2.3"], "bookmarks": [ {"name": "google", "url": "https://google.com"}, {"name": "facebook", "url": "https://facebook.com"} ], "start_pages": ["https://google.com", "https://facebook.com"] } } # Session setup session = requests.Session() session.headers.update({ "X-Octo-Api-Token": config["octo_token"], "Content-Type": "application/json" }) session.timeout = 10 # Helper functions def sleep(seconds): time.sleep(seconds) def check_limits(response): rpm = int(response.headers.get("x-ratelimit-remaining", 0)) rph = int(response.headers.get("x-ratelimit-remaining-hour", 0)) if rpm < 10: print("Waiting a minute...") sleep(60) if rph < 10: print("Waiting an hour...") sleep(3600) # API functions def get_total_profiles(): response = session.get(f"{config['octo_api_base_url']}profiles?page=0&page_len=10") response.raise_for_status() total_profiles = response.json()["total_count"] total_pages = math.ceil(total_profiles / 100) print(f"Total Profiles: {total_profiles}\nTotal Pages: {total_pages}") check_limits(response) return total_pages def get_all_profiles_uuids(total_pages): profiles = [] for i in range(total_pages): response = session.get(f"{config['octo_api_base_url']}profiles?page={i}&page_len=100") response.raise_for_status() check_limits(response) profiles.extend(response.json()["data"]) return profiles def patch_all_profiles(profiles): updated = [] not_updated = [] for profile in profiles: try: response = session.patch( f"{config['octo_api_base_url']}profiles/{profile['uuid']}", json=config["data"] ) response.raise_for_status() check_limits(response) updated.append(profile) print(f"Successfully updated {profile['uuid']}") except Exception as e: not_updated.append(profile) print(f"ERROR: Can't patch profile {profile['uuid']} - {str(e)}") return updated, not_updated # Main process if __name__ == "__main__": try: total = get_total_profiles() profiles = get_all_profiles_uuids(total) updated, not_updated = patch_all_profiles(profiles) print(f"Finished process:\nUpdated: {len(updated)}\nNot updated: {len(not_updated)}") except Exception as e: print(f"Fatal error: {str(e)}")
Lưu ý rằng thư viện "requests" cần được cài đặt trong môi trường Python của bạn để tập lệnh này hoạt động. Bạn có thể cài đặt nó bằng pip:
pip install requests
Ngoài ra, thay thế "OCTO_API_TOKEN" bằng token thực của bạn để thực hiện các yêu cầu API.

Sử dụng ChatGPT để chuyển đổi các kịch bản
Làm việc với các thư viện Puppeteer, Selenium, và Playwright
Các khung tự động hóa trình duyệt thường được thiết kế để hoạt động tốt với Google Chrome, được xây dựng trên Chromium. Vì Octo Browser cũng dựa trên kernel Chromium, nó tương tác với các khung này một cách dễ dàng.
Tự động hóa với Selenium
Selenium là công cụ phổ biến để tự động hóa các hành động trình duyệt, cung cấp khả năng mô phỏng các hành động của người dùng trên trang web.
Đặc điểm chính
Tự động hóa các công việc web.
Hoạt động với các trang web động sử dụng JavaScript và AJAX.
Ưu điểm
Linh hoạt và hỗ trợ nhiều ngôn ngữ lập trình.
Miễn phí sử dụng với cộng đồng lớn và tích cực.
Mã nguồn mở.
Nhược điểm
Chậm và tốn tài nguyên.
Cần phải hiểu rõ các khái niệm lập trình.
Tự động hóa trình duyệt với Selenium cho phép bạn tối ưu hóa các nhiệm vụ hồ sơ khác nhau từ các tập lệnh tự động đơn giản đến các máy bò web tìm kiếm, thu thập và tương tác với dữ liệu từ các nguồn trực tuyến khác nhau.
Selenium nổi tiếng với những ai có kinh nghiệm quản lý nhiều tài khoản cùng một lúc. Nó có thể được triển khai ngay trong trình duyệt và có thể được sử dụng để mô phỏng các hành động của một người thật. Tuy nhiên, Selenium không phải lúc nào cũng là giải pháp hoàn hảo, và lớp che giấu của nó có thể bị phát hiện bởi một số nền tảng, CloudFlare trong số đó.
CloudFlare là nhà cung cấp dịch vụ bảo mật web cung cấp dịch vụ mạng phân phối nội dung an toàn, bảo vệ khỏi các cuộc tấn công DDoS và máy chủ DNS. Các trang web sử dụng giải pháp CloudFare để phát hiện các truy vấn được khởi tạo bởi Selenium.
Tự động hóa Puppeteer
Puppeteer là một thư viện Node.js cho phép bạn tự động hóa công việc với các trình duyệt dựa trên Chromium bằng cách sử dụng giao thức DevTools.
Các tính năng
Công cụ tự động hóa hành động web mạnh mẽ và linh hoạt.
Có thể tương tác với các trang web như một trình duyệt thông thường.
Có một phiên bản không chính thức bằng Python được biết đến là Pyppeteer, và chúng tôi đã tạo một hướng dẫn về cách kết nối nó.
Ưu điểm
Lựa chọn tuyệt vời để làm việc với các trang web động và thực thi mã JavaScript.
API dễ sử dụng và cấu hình dễ dàng.
Công cụ miễn phí với cộng đồng tích cực.
Nhược điểm
Chỉ hỗ trợ JavaScript (Node.js), nhưng có các phiên bản không chính thức cho các ngôn ngữ khác. Chẳng hạn, một phiên bản cho Python gọi là Pyppeteer.
Tốn tài nguyên; chậm hơn một số thư viện khác.
Tự động hóa với Playwright
Playwright là một thư viện Node.js tạo điều kiện tự động hóa nhanh chóng, an toàn và hiệu quả cho Chromium, Firefox và WebKit bằng cách sử dụng cùng một API.
Các tính năng
Công cụ tạo mã, CodeGen, có sẵn. Bạn có thể sử dụng nó để tránh viết một lượng lớn mã lặp lại, giúp tiết kiệm nhiều thời gian.
Bạn có thể làm chậm tốc độ hoàn thành các hành động trên trang web bằng cách sử dụng tham số slowMo, mang tốc độ hoàn thành các hành động này gần với giá trị của con người thực.
Hỗ trợ tự nhiên làm việc với Shadow DOM.
Ưu điểm
Mã nguồn mở.
Dễ cài đặt và cấu hình.
Hỗ trợ tất cả các nhân trình duyệt cần thiết.
Hỗ trợ tất cả ba hệ điều hành chính (macOS, Windows, Linux).
Hỗ trợ tất cả các ngôn ngữ lập trình phổ biến (Python, Golang, Java, JS, C#).
Hỗ trợ các bộ kiểm tra (Mocha, Jest, Jasmine).
Tích hợp với các công cụ CI/CD (Jenkins, CircleCI, Azure Pipeline, TravisCI).
Trì hoãn tự động, do đó bạn không cần phải mã cứng các trì hoãn rõ ràng.
Chức năng auto-wait.
Thực thi song song khi bạn cần mở nhiều tab cùng một lúc.
Trình báo lỗi dễ chịu.
Nhược điểm
Sản phẩm khá mới.
Cộng đồng hạn chế.
Không hỗ trợ Ruby.
API: Thiết lập Môi trường
Cài đặt Visual Studio Code để bắt đầu. Chọn hệ điều hành của bạn và loại của nó (32 hoặc 64 bit).
Cài đặt Node.js. Nhấn
Enterhai lần trong quá trình cài đặt để tải xuống các gói bổ sung trong cửa sổ PowerShell.Tạo một thư mục làm việc mới ở vị trí thuận tiện. Mở VS Code và bấm Ctrl + K + O, sau đó chọn thư mục bạn vừa tạo.
Cài đặt tiện ích mở rộng NPM. Nó cho phép bạn cài đặt các gói cho Node.js và ASP.NET Core và điều khiển chúng. Để làm như vậy, nhấn Ctrl + P, và trong cửa sổ tìm kiếm nhập
ext install npm. Chọn tiện ích mở rộng đầu tiên từ danh sách hiển thị.

Cài đặt tiện ích mở rộng NPM trong Visual Studio Code
Cài đặt tiện ích mở rộng Code runner. Để làm như vậy, nhấn Ctrl + P, và trong cửa sổ tìm kiếm nhập
ext install code runner. Cài đặt tiện ích mở rộng đầu tiên từ danh sách.Mở terminal VS Code và tạo package.json bằng lệnh
npm init -y. Bạn sẽ thấy tệppackage.jsontrong trình khám phá và một thông báo tương ứng trong terminal.

Tạo package.json với việc tự động điền các trường tiêu chuẩn

Khởi tạo một kho lưu trữ mới trong Visual Studio Code
Cài đặt các thư viện bằng lệnh npm i axios puppeteer playwright trong terminal VS Code. Bạn sẽ thấy một thư mục con mới là node-modules và một tệp mới là package-lock.json.
Các đoạn mã hữu ích cho quản lý nhiều tài khoản trong Octo Browser
Bạn có thể sử dụng các đoạn mã có sẵn từ Kiến thức cơ bản về API của Octo Browser, ví dụ, tập lệnh mẫu để lấy tên của tất cả các hồ sơ trong tài khoản của bạn.
//connecting modules const fs = require('fs').promises; const axios = require('axios'); //here is config. Paste your Octo API Token here const config = { octo_token: "OCTO_API_TOKEN", octo_api_base_url: "https://app.octobrowser.net/api/v2/automation/", } const OCTO_REMOTE_API = axios.create({ baseURL: config.octo_api_base_url, timeout: 10000, headers: { 'X-Octo-Api-Token': config.octo_token, 'Content-Type': "application/json" } }); //functions async function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms * 1000)); } async function check_limits(response) { let rpm = response.headers['x-ratelimit-remaining']; let rph = response.headers['x-ratelimit-remaining-hour']; if (rpm < 10) { console.log("Waiting a minute..."); await sleep(60); } if (rph < 10) { console.log("Waiting an hour..."); await sleep(3600); } } async function get_total_pages() { const response = await OCTO_REMOTE_API.get('/profiles?page=0&page_len=10'); const total_profiles = response.data.total_count; const total_pages = Math.ceil(response.data.total_count / 100); console.log(`Total Profiles: ${total_profiles}\nTotal Pages: ${total_pages}`); await check_limits(response); return total_pages; } async function get_all_profiles_titles(total_pages) { let profiles = []; for (let i = 0; i < total_pages; i++) { let response = await OCTO_REMOTE_API.get(`/profiles?page=${i}&page_len=100&fields=title`); await check_limits(response); profiles.push(...response.data.data); } return profiles; } async function write_file(profiles) { const titles = profiles.map(item => item.title).filter(Boolean); try { await fs.writeFile('./profiles_titles.txt', titles.join('\n'), 'utf-8'); } catch (error) { console.error(`ERROR: While trying writing the file some error occured:\n${error}`); } } //main process (async () => { const total_pages = await get_total_pages(); const profiles = await get_all_profiles_titles(total_pages); await write_file(profiles); console.log('Finished. Check profiles_titles.txt file...'); })()
Tạo và chạy kịch bản
Tạo một tệp .js. Nhấp chuột phải vào Explorer sẽ hiển thị các tệp đã tạo. Truy cập tài liệu API và chọn Node.js — Axios (thường cURL là lựa chọn mặc định). Bạn có thể khởi tạo kịch bản đã tạo bằng cách chạy lệnh node script_name.js trong terminal VS Code.

Tôi có nên sử dụng tự động hóa cho nhóm của mình không?
Các khảo sát của chúng tôi cho thấy ngày càng nhiều nhóm chuyển sang tự động hóa vì nó giúp giảm đáng kể thời gian làm việc và cho phép các quy trình độc lập, không đồng bộ trong các hồ sơ. Ngay cả những tối ưu hóa nhỏ trong quy trình làm việc hàng ngày cũng sẽ mang lại kết quả đáng chú ý và tăng tốc độ công việc của bạn trong Octo Browser. Nói lời tạm biệt với việc cấu hình proxy thủ công, thêm trang bắt đầu hoặc cài đặt tiện ích mở rộng cho mỗi hồ sơ! Bạn có thể sử dụng các đoạn mã có sẵn từ Cơ sở kiến thức của chúng tôi, hoặc điều chỉnh chúng cho nhu cầu cụ thể của mình để đạt được mức độ đa tài khoản mới.
Câu hỏi thường gặp
Tôi lo lắng rằng kịch bản có thể đánh cắp tài khoản, token hoặc mật khẩu của tôi.
Mã chúng tôi cung cấp là mã mở và hoàn toàn minh bạch. Bạn có thể tự thấy rằng không có yêu cầu nào được gửi đến các nguồn tài nguyên bên thứ ba, kịch bản chỉ sử dụng các thư viện chính thức và được khởi động trên máy tính cục bộ của bạn.
Tôi có thể chỉnh sửa kịch bản để phù hợp với nhu cầu của mình hơn không?
Hoàn toàn có thể! Đây là mã nguồn mở. Chúng tôi rất vui nếu bạn sử dụng kịch bản của chúng tôi như là khung cơ bản có thể tùy chỉnh cho các tác vụ của bạn.
Các yêu cầu API cục bộ có sử dụng hết giới hạn yêu cầu không?
Trong số tất cả các yêu cầu có sẵn trong cột API cục bộ, chỉ có các yêu cầu Khởi động Hồ sơ là tính vào giới hạn của bạn. Liệt kê Hồ sơ Hoạt động, Dừng Hồ sơ, Buộc dừng Hồ sơ, Đăng nhập, Đăng xuất, Lấy phiên bản Khách hàng, Cập nhật các yêu cầu Khách hàng không tính vào giới hạn của bạn.
Nơi nào cần Tự động hóa Trình duyệt nhất?
Thực hiện các hành động lặp đi lặp lại bằng tay tiêu tốn thời gian mà bạn có thể dành cho các công việc quan trọng hơn. Ngoài việc tiết kiệm thời gian và tập trung của bạn, tự động hóa cũng giúp ngăn ngừa sai sót. Lặp lại cùng một hành động hàng trăm lần làm cho sai sót gần như không thể tránh khỏi, ví dụ: thiết lập sai thẻ hoặc khởi chạy các hồ sơ mà không gán proxy đúng. Không giống như con người, thuật toán không mắc những sai lầm như vậy. Với một kịch bản được kiểm thử tốt, bạn có thể chắc chắn rằng mọi thứ được thực thi một cách chính xác.
Ngoài việc giải quyết các nhiệm vụ chung, tự động hóa còn đặc biệt hữu ích trong các lĩnh vực sau:
Tiếp thị liên kết: Tự động hóa tạo hồ sơ hàng loạt và cài đặt, bao gồm cả cookies, proxy, tiện ích mở rộng, và trang bắt đầu.
Trang trại tài khoản: Nhanh chóng tạo tài khoản trong các khu vực địa lý yêu cầu và chuẩn bị chúng tự động. Xuất tất cả các hồ sơ trong danh sách xuất.
Scraping web: Điều chỉnh tần suất yêu cầu mỗi IP đến mức an toàn, xoay vòng proxy và chỉnh sửa dấu vân tay trong trường hợp bị chặn.
E-commerce: Phát triển kịch bản để tự động hóa các công việc tốn nhiều công sức và an toàn trích xuất dữ liệu đối thủ cạnh tranh.
Đánh bạc và săn tiền thưởng: Đơn giản hoá việc tạo hồ sơ với vị trí địa lý và tham số dấu vân tay cần thiết. Tự động hóa các hành động hàng loạt qua các tài khoản để vượt qua các giới hạn đặt cược.
Bắt đầu với API
Chúng tôi đã phân tích các cuộc gọi API từ người dùng và nhận thấy rằng nhiều nhóm đang tích cực triển khai kịch bản để quản lý các hồ sơ, qua đó thay đổi các phương pháp tiếp cận thông thường đối với tính đa tài khoản. Nhiều lãnh đạo của các nhóm tiếp thị liên kết lớn nhấn mạnh sự thuận tiện của API của chúng tôi là một trong những lợi thế chính của Octo so với đối thủ.
API hiện tại của chúng tôi cho phép bạn tạo hồ sơ với các dấu vân tay kỹ thuật số bạn cần, thêm proxy, gán thẻ, cũng như bắt đầu và dừng các kịch bản tự động bằng bất kỳ khung tự động hóa trình duyệt nào. Bạn cũng có thể làm việc với các hồ sơ của mình trong chế độ lai, tận dụng tối đa sự kết hợp giữa những lợi ích của tự động hóa với sự điều chỉnh chính xác mà điều khiển thủ công truyền thống của các tài khoản của bạn cho phép.

Bạn có thể tìm thấy token API của mình trong Cài đặt bổ sung của Tài khoản chủ Octo Browser
Token API của bạn
Octo Browser cung cấp cho bạn quyền truy cập vào token API của bạn bắt đầu với Gói đăng kí Base trở lên. Giới hạn cuộc gọi API của bạn được xác định bởi gói đăng kí của bạn. Nếu bạn có Gói đăng kí Advanced, bạn có thể tăng thêm giới hạn API của mình lên 1.000 yêu cầu mỗi phút (RPM) và 50.000 yêu cầu mỗi giờ (RPH). Để có giới hạn cao hơn nữa, vui lòng liên hệ Dịch vụ khách hàng.
Tầng đăng kí | RPM | RPH |
|---|---|---|
Base | 50 | 500 |
Team | 100 | 1500 |
Advanced | 200 (+800) | 3000 (+47 000) |
Lựa chọn ngôn ngữ lập trình
Chủ đề về lựa chọn ngôn ngữ lập trình quá rộng để có thể bao quát tất cả các kết hợp ngôn ngữ và thư viện có thể có tại đây. Trong ví dụ của chúng tôi, chúng tôi sẽ sử dụng Node.js + Axios, vì chúng tôi có kinh nghiệm với công nghệ này. Các ngôn ngữ khác, chẳng hạn như C hoặc C#, có thể nhanh hơn, nhưng mỗi ngôn ngữ có các đặc điểm riêng, các điểm nhấn và các tình huống sử dụng riêng. Bạn có thể chọn bất kỳ ngôn ngữ nào dựa trên kinh nghiệm của bạn.
Sử dụng AI để viết lại mã
Chúng tôi yêu thích tự động hóa và luôn cố gắng tối ưu hóa công việc của mình, vì vậy chúng tôi sử dụng AI để viết lại mã ngôn ngữ cần thiết. Rất đơn giản: bạn có thể yêu cầu ChatGPT chuyển đổi mã cho bạn bằng cách sử dụng đoạn lời nhắc sau: Chuyển đổi tập lệnh này từ Node.js với Axios sang Python với thư viện Requests.
//modules const axios = require('axios'); //here is config. Paste your Octo API Token here and you can modify this for your personal needs const config = { octo_token: "OCTO_API_TOKEN", octo_api_base_url: "https://app.octobrowser.net/api/v2/automation/", data: { extensions: ['aapfglkgnhmiaabhiijkjpfmhllaodgp@4.2.3'], bookmarks: [{ "name": "google", "url": "https://google.com" }, { "name": "facebook", "url": "https://facebook.com" }], start_pages: ["https://google.com", "https://facebook.com"] } } const OCTO_REMOTE_API = axios.create({ baseURL: config.octo_api_base_url, timeout: 10000, headers: { 'X-Octo-Api-Token': config.octo_token, 'Content-Type': "application/json" } }); //functions async function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms * 1000)); } async function check_limits(response) { let rpm = response.headers['x-ratelimit-remaining']; let rph = response.headers['x-ratelimit-remaining-hour']; if (rpm < 10) { console.log("Waiting a minute..."); await sleep(60); } if (rph < 10) { console.log("Waiting an hour..."); await sleep(3600); } } async function get_total_profiles(){ const response = await OCTO_REMOTE_API.get('/profiles?page=0&page_len=10'); const total_profiles = response.data.total_count; const total_pages = Math.ceil(response.data.total_count/100); console.log(`Total Profiles: ${total_profiles}\nTotal Pages: ${total_pages}`); await check_limits(response); return total_pages; } async function get_all_profiles_uuids(total_pages){ let profiles = []; for (let i = 0; i < total_pages; i++) { let response = await OCTO_REMOTE_API.get(`/profiles?page=${i}&page_len=100`); await check_limits(response); profiles.push(...response.data.data); } return profiles; } async function patch_all_profiles(profiles){ let updated = []; let not_updated = []; for (let profile of profiles) { try{ const response = await OCTO_REMOTE_API.patch(`/profiles/${profile.uuid}`, config.data); await check_limits(response); updated.push(profile); console.log(`Successfully updated ${profile.uuid}`); } catch (error) { not_updated.push(profile); console.error(`ERROR: Can't patch profile ${profile.uuid}`); } } return [updated, not_updated]; } //main process (async () => { const total = await get_total_profiles(); const profiles = await get_all_profiles_uuids(total); const [updated, not_updated] = await patch_all_profiles(profiles); console.log(`Finished process:\nUpdated: ${updated.length}\nNot updated: ${not_updated.length}`); })();

Cho ChatGPT xử lý các đoạn mã
Tất nhiên, đây là tập lệnh Python tương đương sử dụng thư viện Requests:
import requests import math import time # Config config = { "octo_token": "OCTO_API_TOKEN", "octo_api_base_url": "https://app.octobrowser.net/api/v2/automation/", "data": { "extensions": ["aapfglkgnhmiaabhiijkjpfmhllaodgp@4.2.3"], "bookmarks": [ {"name": "google", "url": "https://google.com"}, {"name": "facebook", "url": "https://facebook.com"} ], "start_pages": ["https://google.com", "https://facebook.com"] } } # Session setup session = requests.Session() session.headers.update({ "X-Octo-Api-Token": config["octo_token"], "Content-Type": "application/json" }) session.timeout = 10 # Helper functions def sleep(seconds): time.sleep(seconds) def check_limits(response): rpm = int(response.headers.get("x-ratelimit-remaining", 0)) rph = int(response.headers.get("x-ratelimit-remaining-hour", 0)) if rpm < 10: print("Waiting a minute...") sleep(60) if rph < 10: print("Waiting an hour...") sleep(3600) # API functions def get_total_profiles(): response = session.get(f"{config['octo_api_base_url']}profiles?page=0&page_len=10") response.raise_for_status() total_profiles = response.json()["total_count"] total_pages = math.ceil(total_profiles / 100) print(f"Total Profiles: {total_profiles}\nTotal Pages: {total_pages}") check_limits(response) return total_pages def get_all_profiles_uuids(total_pages): profiles = [] for i in range(total_pages): response = session.get(f"{config['octo_api_base_url']}profiles?page={i}&page_len=100") response.raise_for_status() check_limits(response) profiles.extend(response.json()["data"]) return profiles def patch_all_profiles(profiles): updated = [] not_updated = [] for profile in profiles: try: response = session.patch( f"{config['octo_api_base_url']}profiles/{profile['uuid']}", json=config["data"] ) response.raise_for_status() check_limits(response) updated.append(profile) print(f"Successfully updated {profile['uuid']}") except Exception as e: not_updated.append(profile) print(f"ERROR: Can't patch profile {profile['uuid']} - {str(e)}") return updated, not_updated # Main process if __name__ == "__main__": try: total = get_total_profiles() profiles = get_all_profiles_uuids(total) updated, not_updated = patch_all_profiles(profiles) print(f"Finished process:\nUpdated: {len(updated)}\nNot updated: {len(not_updated)}") except Exception as e: print(f"Fatal error: {str(e)}")
Lưu ý rằng thư viện "requests" cần được cài đặt trong môi trường Python của bạn để tập lệnh này hoạt động. Bạn có thể cài đặt nó bằng pip:
pip install requests
Ngoài ra, thay thế "OCTO_API_TOKEN" bằng token thực của bạn để thực hiện các yêu cầu API.

Sử dụng ChatGPT để chuyển đổi các kịch bản
Làm việc với các thư viện Puppeteer, Selenium, và Playwright
Các khung tự động hóa trình duyệt thường được thiết kế để hoạt động tốt với Google Chrome, được xây dựng trên Chromium. Vì Octo Browser cũng dựa trên kernel Chromium, nó tương tác với các khung này một cách dễ dàng.
Tự động hóa với Selenium
Selenium là công cụ phổ biến để tự động hóa các hành động trình duyệt, cung cấp khả năng mô phỏng các hành động của người dùng trên trang web.
Đặc điểm chính
Tự động hóa các công việc web.
Hoạt động với các trang web động sử dụng JavaScript và AJAX.
Ưu điểm
Linh hoạt và hỗ trợ nhiều ngôn ngữ lập trình.
Miễn phí sử dụng với cộng đồng lớn và tích cực.
Mã nguồn mở.
Nhược điểm
Chậm và tốn tài nguyên.
Cần phải hiểu rõ các khái niệm lập trình.
Tự động hóa trình duyệt với Selenium cho phép bạn tối ưu hóa các nhiệm vụ hồ sơ khác nhau từ các tập lệnh tự động đơn giản đến các máy bò web tìm kiếm, thu thập và tương tác với dữ liệu từ các nguồn trực tuyến khác nhau.
Selenium nổi tiếng với những ai có kinh nghiệm quản lý nhiều tài khoản cùng một lúc. Nó có thể được triển khai ngay trong trình duyệt và có thể được sử dụng để mô phỏng các hành động của một người thật. Tuy nhiên, Selenium không phải lúc nào cũng là giải pháp hoàn hảo, và lớp che giấu của nó có thể bị phát hiện bởi một số nền tảng, CloudFlare trong số đó.
CloudFlare là nhà cung cấp dịch vụ bảo mật web cung cấp dịch vụ mạng phân phối nội dung an toàn, bảo vệ khỏi các cuộc tấn công DDoS và máy chủ DNS. Các trang web sử dụng giải pháp CloudFare để phát hiện các truy vấn được khởi tạo bởi Selenium.
Tự động hóa Puppeteer
Puppeteer là một thư viện Node.js cho phép bạn tự động hóa công việc với các trình duyệt dựa trên Chromium bằng cách sử dụng giao thức DevTools.
Các tính năng
Công cụ tự động hóa hành động web mạnh mẽ và linh hoạt.
Có thể tương tác với các trang web như một trình duyệt thông thường.
Có một phiên bản không chính thức bằng Python được biết đến là Pyppeteer, và chúng tôi đã tạo một hướng dẫn về cách kết nối nó.
Ưu điểm
Lựa chọn tuyệt vời để làm việc với các trang web động và thực thi mã JavaScript.
API dễ sử dụng và cấu hình dễ dàng.
Công cụ miễn phí với cộng đồng tích cực.
Nhược điểm
Chỉ hỗ trợ JavaScript (Node.js), nhưng có các phiên bản không chính thức cho các ngôn ngữ khác. Chẳng hạn, một phiên bản cho Python gọi là Pyppeteer.
Tốn tài nguyên; chậm hơn một số thư viện khác.
Tự động hóa với Playwright
Playwright là một thư viện Node.js tạo điều kiện tự động hóa nhanh chóng, an toàn và hiệu quả cho Chromium, Firefox và WebKit bằng cách sử dụng cùng một API.
Các tính năng
Công cụ tạo mã, CodeGen, có sẵn. Bạn có thể sử dụng nó để tránh viết một lượng lớn mã lặp lại, giúp tiết kiệm nhiều thời gian.
Bạn có thể làm chậm tốc độ hoàn thành các hành động trên trang web bằng cách sử dụng tham số slowMo, mang tốc độ hoàn thành các hành động này gần với giá trị của con người thực.
Hỗ trợ tự nhiên làm việc với Shadow DOM.
Ưu điểm
Mã nguồn mở.
Dễ cài đặt và cấu hình.
Hỗ trợ tất cả các nhân trình duyệt cần thiết.
Hỗ trợ tất cả ba hệ điều hành chính (macOS, Windows, Linux).
Hỗ trợ tất cả các ngôn ngữ lập trình phổ biến (Python, Golang, Java, JS, C#).
Hỗ trợ các bộ kiểm tra (Mocha, Jest, Jasmine).
Tích hợp với các công cụ CI/CD (Jenkins, CircleCI, Azure Pipeline, TravisCI).
Trì hoãn tự động, do đó bạn không cần phải mã cứng các trì hoãn rõ ràng.
Chức năng auto-wait.
Thực thi song song khi bạn cần mở nhiều tab cùng một lúc.
Trình báo lỗi dễ chịu.
Nhược điểm
Sản phẩm khá mới.
Cộng đồng hạn chế.
Không hỗ trợ Ruby.
API: Thiết lập Môi trường
Cài đặt Visual Studio Code để bắt đầu. Chọn hệ điều hành của bạn và loại của nó (32 hoặc 64 bit).
Cài đặt Node.js. Nhấn
Enterhai lần trong quá trình cài đặt để tải xuống các gói bổ sung trong cửa sổ PowerShell.Tạo một thư mục làm việc mới ở vị trí thuận tiện. Mở VS Code và bấm Ctrl + K + O, sau đó chọn thư mục bạn vừa tạo.
Cài đặt tiện ích mở rộng NPM. Nó cho phép bạn cài đặt các gói cho Node.js và ASP.NET Core và điều khiển chúng. Để làm như vậy, nhấn Ctrl + P, và trong cửa sổ tìm kiếm nhập
ext install npm. Chọn tiện ích mở rộng đầu tiên từ danh sách hiển thị.

Cài đặt tiện ích mở rộng NPM trong Visual Studio Code
Cài đặt tiện ích mở rộng Code runner. Để làm như vậy, nhấn Ctrl + P, và trong cửa sổ tìm kiếm nhập
ext install code runner. Cài đặt tiện ích mở rộng đầu tiên từ danh sách.Mở terminal VS Code và tạo package.json bằng lệnh
npm init -y. Bạn sẽ thấy tệppackage.jsontrong trình khám phá và một thông báo tương ứng trong terminal.

Tạo package.json với việc tự động điền các trường tiêu chuẩn

Khởi tạo một kho lưu trữ mới trong Visual Studio Code
Cài đặt các thư viện bằng lệnh npm i axios puppeteer playwright trong terminal VS Code. Bạn sẽ thấy một thư mục con mới là node-modules và một tệp mới là package-lock.json.
Các đoạn mã hữu ích cho quản lý nhiều tài khoản trong Octo Browser
Bạn có thể sử dụng các đoạn mã có sẵn từ Kiến thức cơ bản về API của Octo Browser, ví dụ, tập lệnh mẫu để lấy tên của tất cả các hồ sơ trong tài khoản của bạn.
//connecting modules const fs = require('fs').promises; const axios = require('axios'); //here is config. Paste your Octo API Token here const config = { octo_token: "OCTO_API_TOKEN", octo_api_base_url: "https://app.octobrowser.net/api/v2/automation/", } const OCTO_REMOTE_API = axios.create({ baseURL: config.octo_api_base_url, timeout: 10000, headers: { 'X-Octo-Api-Token': config.octo_token, 'Content-Type': "application/json" } }); //functions async function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms * 1000)); } async function check_limits(response) { let rpm = response.headers['x-ratelimit-remaining']; let rph = response.headers['x-ratelimit-remaining-hour']; if (rpm < 10) { console.log("Waiting a minute..."); await sleep(60); } if (rph < 10) { console.log("Waiting an hour..."); await sleep(3600); } } async function get_total_pages() { const response = await OCTO_REMOTE_API.get('/profiles?page=0&page_len=10'); const total_profiles = response.data.total_count; const total_pages = Math.ceil(response.data.total_count / 100); console.log(`Total Profiles: ${total_profiles}\nTotal Pages: ${total_pages}`); await check_limits(response); return total_pages; } async function get_all_profiles_titles(total_pages) { let profiles = []; for (let i = 0; i < total_pages; i++) { let response = await OCTO_REMOTE_API.get(`/profiles?page=${i}&page_len=100&fields=title`); await check_limits(response); profiles.push(...response.data.data); } return profiles; } async function write_file(profiles) { const titles = profiles.map(item => item.title).filter(Boolean); try { await fs.writeFile('./profiles_titles.txt', titles.join('\n'), 'utf-8'); } catch (error) { console.error(`ERROR: While trying writing the file some error occured:\n${error}`); } } //main process (async () => { const total_pages = await get_total_pages(); const profiles = await get_all_profiles_titles(total_pages); await write_file(profiles); console.log('Finished. Check profiles_titles.txt file...'); })()
Tạo và chạy kịch bản
Tạo một tệp .js. Nhấp chuột phải vào Explorer sẽ hiển thị các tệp đã tạo. Truy cập tài liệu API và chọn Node.js — Axios (thường cURL là lựa chọn mặc định). Bạn có thể khởi tạo kịch bản đã tạo bằng cách chạy lệnh node script_name.js trong terminal VS Code.

Tôi có nên sử dụng tự động hóa cho nhóm của mình không?
Các khảo sát của chúng tôi cho thấy ngày càng nhiều nhóm chuyển sang tự động hóa vì nó giúp giảm đáng kể thời gian làm việc và cho phép các quy trình độc lập, không đồng bộ trong các hồ sơ. Ngay cả những tối ưu hóa nhỏ trong quy trình làm việc hàng ngày cũng sẽ mang lại kết quả đáng chú ý và tăng tốc độ công việc của bạn trong Octo Browser. Nói lời tạm biệt với việc cấu hình proxy thủ công, thêm trang bắt đầu hoặc cài đặt tiện ích mở rộng cho mỗi hồ sơ! Bạn có thể sử dụng các đoạn mã có sẵn từ Cơ sở kiến thức của chúng tôi, hoặc điều chỉnh chúng cho nhu cầu cụ thể của mình để đạt được mức độ đa tài khoản mới.
Câu hỏi thường gặp
Tôi lo lắng rằng kịch bản có thể đánh cắp tài khoản, token hoặc mật khẩu của tôi.
Mã chúng tôi cung cấp là mã mở và hoàn toàn minh bạch. Bạn có thể tự thấy rằng không có yêu cầu nào được gửi đến các nguồn tài nguyên bên thứ ba, kịch bản chỉ sử dụng các thư viện chính thức và được khởi động trên máy tính cục bộ của bạn.
Tôi có thể chỉnh sửa kịch bản để phù hợp với nhu cầu của mình hơn không?
Hoàn toàn có thể! Đây là mã nguồn mở. Chúng tôi rất vui nếu bạn sử dụng kịch bản của chúng tôi như là khung cơ bản có thể tùy chỉnh cho các tác vụ của bạn.
Các yêu cầu API cục bộ có sử dụng hết giới hạn yêu cầu không?
Trong số tất cả các yêu cầu có sẵn trong cột API cục bộ, chỉ có các yêu cầu Khởi động Hồ sơ là tính vào giới hạn của bạn. Liệt kê Hồ sơ Hoạt động, Dừng Hồ sơ, Buộc dừng Hồ sơ, Đăng nhập, Đăng xuất, Lấy phiên bản Khách hàng, Cập nhật các yêu cầu Khách hàng không tính vào giới hạn của bạn.
Cập nhật với các tin tức Octo Browser mới nhất
Khi nhấp vào nút này, bạn sẽ đồng ý với Chính sách Quyền riêng tư của chúng tôi.
Cập nhật với các tin tức Octo Browser mới nhất
Khi nhấp vào nút này, bạn sẽ đồng ý với Chính sách Quyền riêng tư của chúng tôi.
Cập nhật với các tin tức Octo Browser mới nhất
Khi nhấp vào nút này, bạn sẽ đồng ý với Chính sách Quyền riêng tư của chúng tôi.
Các bài viết liên quan
Các bài viết liên quan
Các bài viết liên quan

Tham gia Octo Browser ngay
Hoặc liên hệ với Dịch vụ khách hàng bất kì lúc nào nếu bạn có bất cứ thắc mắc nào.

Tham gia Octo Browser ngay
Hoặc liên hệ với Dịch vụ khách hàng bất kì lúc nào nếu bạn có bất cứ thắc mắc nào.
Tham gia Octo Browser ngay
Hoặc liên hệ với Dịch vụ khách hàng bất kì lúc nào nếu bạn có bất cứ thắc mắc nào.


