Bỏ qua điều hướng
AdsPower.vn

Đây là trang thông tin độc lập, không phải trang chính thức và không có quan hệ sở hữu hay hợp tác với AdsPower.

Kết nối Selenium Python với AdsPower qua Local API

Biên soạn bởi Cập nhật

Selenium là framework tự động hoá trình duyệt phổ biến nhất với người viết script bằng Python ở Việt Nam. Bài này giải thích cách gắn Selenium vào một hồ sơ AdsPower đang chạy, thay vì để Selenium tự mở một trình duyệt Chrome trắng tinh không có dấu vân tay riêng.

Vì sao không dùng Selenium mở trình duyệt trực tiếp như bình thường?

Cách dùng Selenium quen thuộc là gọi webdriver.Chrome() để Selenium tự khởi động một trình duyệt Chrome mới, do chính Selenium quản lý từ đầu đến cuối. Nếu làm vậy với AdsPower, bạn sẽ bỏ lỡ toàn bộ giá trị của phần mềm: dấu vân tay riêng, cấu hình proxy gắn sẵn, cookie đã lưu của hồ sơ — vì Selenium đang mở một Chrome hoàn toàn khác, không liên quan gì đến hồ sơ AdsPower.

Điều bạn cần là gắn Selenium vào đúng trình duyệt mà AdsPower đã khởi động cho hồ sơ đó. Kỹ thuật này gọi là kết nối qua địa chỉ gỡ lỗi từ xa (remote debugging address) — một khả năng tiêu chuẩn của Chromium, không phải tính năng riêng của AdsPower.

Điều kiện cần trước khi bắt đầu

  • Tài khoản AdsPower ở bậc Professional trở lên (Local API không có ở gói Free).
  • Ứng dụng AdsPower đang mở và đăng nhập trên máy chạy script.
  • Đã cài selenium cho Python (pip install selenium).
  • Hồ sơ dùng nhân SunBrowser (Chromium) — bài này không áp dụng cho FlowerBrowser (Firefox).

Luồng kết nối tổng quát

Bước 1: Gọi Local API để mở hồ sơ

Gọi endpoint mở hồ sơ theo tài liệu Postman chính hãng (documenter.getpostman.com/view/45822952/2sB34hEzQH), truyền vào ID của hồ sơ cần mở. Phản hồi trả về thông tin kết nối của trình duyệt vừa khởi động, trong đó có địa chỉ gỡ lỗi mà bạn sẽ dùng ở bước sau.

Vì tên trường chính xác trong JSON phản hồi có thể khác nhau giữa các phiên bản, bài này dùng biến giữ chỗ debug_address để minh hoạ luồng xử lý, không in cứng tên trường:

import requests

# Thay URL bên dưới bằng đúng endpoint mở hồ sơ trong tài liệu chính hãng.
# Đây chỉ là ví dụ minh hoạ luồng gọi, không phải endpoint thật.
response = requests.get(
    "http://<local-api-host>:<port>/<endpoint-mo-ho-so-theo-tai-lieu>",
    params={"profile_id": "ID_HO_SO_CAN_MO"},
)
data = response.json()

# Tên trường thật lấy theo tài liệu Postman — dưới đây là biến giữ chỗ minh hoạ.
debug_address = data["giu_cho_dia_chi_go_loi"]  # ví dụ dạng "127.0.0.1:9222"

Bước 2: Gắn Selenium vào địa chỉ gỡ lỗi đó

Đây là phần dùng được nguyên vẹn cho bất kỳ trình duyệt nào dựa trên Chromium, kể cả SunBrowser của AdsPower:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
# debugger_address lấy từ bước 1 — đây là cơ chế chuẩn của Chromium,
# không phải tham số riêng của AdsPower.
options.add_experimental_option("debuggerAddress", debug_address)

driver = webdriver.Chrome(options=options)

# Từ đây driver đã gắn vào đúng phiên trình duyệt AdsPower đang chạy,
# mang theo dấu vân tay, proxy và cookie của hồ sơ đó.
print(driver.title)
driver.get("https://example.com")

Lưu ý phiên bản ChromeDriver cần tương thích tương đối với phiên bản Chromium nền của SunBrowser. Nếu dùng thư viện tự động tải driver phù hợp (ví dụ webdriver-manager hoặc cơ chế quản lý driver có sẵn trong bản Selenium mới), bạn đỡ phải tự tay tải và khớp phiên bản driver.

Bước 3: Thao tác bình thường như mọi script Selenium khác

Sau khi gắn thành công, mọi API quen thuộc của Selenium (find_element, click(), send_keys(), chờ điều kiện, chụp ảnh màn hình…) đều dùng bình thường, không có gì khác biệt so với việc điều khiển một trình duyệt Selenium tự mở.

Bước 4: Đóng hồ sơ qua Local API khi xong việc

Sau khi script hoàn tất, gọi lại Local API để đóng hồ sơ (theo endpoint tương ứng trong tài liệu), thay vì chỉ gọi driver.quit(). Việc gọi API để đóng đúng cách giúp AdsPower giải phóng đúng tài nguyên và cập nhật đúng trạng thái hồ sơ trong danh sách.

Những lỗi thường gặp khi mới kết nối

  • Selenium mở một Chrome trắng mới thay vì gắn vào hồ sơ: thường do quên set debuggerAddress, hoặc set sai địa chỉ/cổng đã lấy từ bước 1.
  • Phiên bản ChromeDriver không tương thích: gây lỗi kết nối ngay từ bước khởi tạo webdriver.Chrome(). Cập nhật driver theo đúng phiên bản Chromium nền.
  • Gọi Local API dồn dập khi test đi test lại nhiều lần: dễ chạm giới hạn tốc độ gọi API (120 lần/phút ở bậc Professional) nếu bạn chạy thử script liên tục trong lúc debug. Xem cách xử lý tại bài xử lý khi chạm trần giới hạn tốc độ gọi API.

Khi nào nên dùng Puppeteer hoặc Playwright thay vì Selenium?

Cơ chế gắn vào địa chỉ gỡ lỗi ở trên là chung cho mọi framework hỗ trợ kết nối qua CDP (Chrome DevTools Protocol), chỉ khác cách gọi API của từng framework. Nếu bạn quen viết Node.js hơn Python, xem bài kết nối Puppeteer Node.js với AdsPower hoặc kết nối Playwright với AdsPower — cả hai đều dùng chung nguyên lý địa chỉ gỡ lỗi lấy từ Local API.

Tài liệu tham khảo chính xác

Toàn bộ tên endpoint, tham số truyền vào, và cấu trúc JSON phản hồi thật của Local API nằm trong tài liệu Postman chính hãng tại documenter.getpostman.com/view/45822952/2sB34hEzQH. Bài này chỉ minh hoạ luồng xử lý và phần kết nối Selenium — luôn đối chiếu tên trường thật với tài liệu gốc trước khi đưa vào code chạy thật. Tìm hiểu thêm khái niệm Local API tại bài API cục bộ AdsPower là gì.

Câu hỏi thường gặp

Vì sao không dùng webdriver.Chrome() bình thường để mở trình duyệt?

Vì cách đó sẽ mở một Chrome mới hoàn toàn tách biệt, không mang theo dấu vân tay, cookie hay cấu hình proxy riêng của hồ sơ AdsPower. Mục tiêu là gắn Selenium vào đúng phiên trình duyệt AdsPower đã mở sẵn, không phải tạo một trình duyệt song song.

SunBrowser (nhân Chromium của AdsPower) có tương thích với Selenium ChromeDriver không?

Có, vì SunBrowser dựa trên Chromium nên tương thích với cơ chế điều khiển qua giao thức gỡ lỗi từ xa (remote debugging) mà Selenium ChromeDriver hỗ trợ. Phiên bản driver cần khớp tương đối với phiên bản Chromium nền, nên nên dùng trình quản lý driver tự động thay vì tải cố định một bản driver.

Cần gói nào của AdsPower để làm theo bài này?

Tối thiểu bậc Professional, vì Local API không có ở gói Free. Xem chi tiết tại bài API cục bộ AdsPower là gì.

Selenium có điều khiển được FlowerBrowser (nhân Firefox) theo cách này không?

Bài này minh hoạ cho nhân Chromium (SunBrowser) vì đây là cơ chế phổ biến và được tài liệu hoá rộng rãi nhất. Với FlowerBrowser (Firefox), cơ chế gắn vào phiên đang chạy khác với Chromium — nên tham khảo tài liệu chính hãng để biết luồng chính xác trước khi viết script cho nhân Firefox.

Chạy vòng lặp mở nhiều hồ sơ liên tiếp bằng Selenium có bị giới hạn gì không?

Có, mỗi lần gọi Local API để mở hồ sơ đều tính vào giới hạn tốc độ gọi API theo bậc giá (120/300/600 lần mỗi phút). Xem cách xử lý tại bài xử lý khi chạm trần giới hạn tốc độ gọi API AdsPower.

Phần mềm liên quan