ChromeDP proxy cấu hình Chrome và xác thực đúng lớp
ChromeDP proxy cần được đặt cho tiến trình Chrome, không chỉ HTTP client của chương trình Go. ProxyVN hướng dẫn anh em tạo allocator, kiểm tra tuyến trình duyệt và xử lý xác thực đúng chỗ. Bài viết còn phân biệt lỗi kết nối, lỗi chờ DOM và thay đổi API ChromeDP, để cấu hình có thể được kiểm tra trước khi đưa vào công việc tự động.
ChromeDP proxy và hai đường mạng trong ứng dụng Go
Một ứng dụng Go điều khiển Chrome thường có ít nhất hai loại kết nối khác nhau. Chương trình Go trao đổi lệnh với trình duyệt qua Chrome DevTools Protocol. Chính Chrome lại tải trang, JavaScript, ảnh và các request của website bằng bộ mạng riêng của trình duyệt.
Cấu hình đúng thành phần tạo request
Nếu anh em tạo http.Transport có proxy rồi gọi chromedp.Navigate, cấu hình Transport đó không tự chuyển sang Chrome. Transport chỉ tác động các lời gọi net/http sử dụng nó. Đây là điểm cần kiểm tra đầu tiên khi một chương trình báo IP đúng trong Go nhưng trang mở bằng trình duyệt vẫn nhìn thấy đường ra khác.
Theo tài liệu net/http của Go, Transport sở hữu cấu hình proxy của HTTP client. Ngược lại, đường tải trang của Chrome cần được thiết lập khi khởi động browser hoặc theo khả năng riêng của môi trường trình duyệt đang dùng. Hai cấu hình có thể cùng tồn tại nhưng phải được nghiệm thu độc lập.
Đầu ra của một bước điều khiển cũng cần được định nghĩa đúng. Navigate kết thúc không có nghĩa bảng dữ liệu JavaScript đã hiển thị và cũng không chứng minh mọi tài nguyên con dùng tuyến mong muốn. Anh em cần một điều kiện về trang và một điều kiện về mạng, thay vì dùng một dấu hiệu để đại diện cho cả hai.
Khi trình duyệt là công cụ phù hợp
ChromeDP phù hợp khi tác vụ cần DOM sau khi JavaScript chạy hoặc cần thao tác trình duyệt được cấp quyền. Nếu tài nguyên là JSON đơn giản và đã có API cho phép, HTTP client thường dễ kiểm soát hơn. Lựa chọn này liên quan cách lấy dữ liệu, không phải loại proxy tự làm trang tĩnh thành trang động.
Anh em nên vẽ ngắn luồng dữ liệu trước khi viết mã: ai nhận URL, ai mở kết nối, ai lưu cookie và ai đọc nội dung cuối. Một sơ đồ đúng giúp chỉ ra nơi cấp bí mật và nơi cần timeout. Nó cũng ngăn tình trạng phần hỗ trợ kiểm tra một client nhưng công việc chính lại dùng client khác.
Với ChromeDP, kiểm tra đường ra của browser và kiểm tra request net/http là hai phép đo khác nhau trong cùng ứng dụng.
ChromeDP proxy theo phiên bản API đang dùng
Ví dụ ChromeDP trên mạng có thể thuộc nhiều thế hệ API. Tại ngày đối chiếu, tài liệu module hiển thị nhánh v0.21.0, với action có kiểu trả về và các hàm điều phối phù hợp. Anh em cần xem go.mod của dự án trước khi sao chép cách gọi từ một bài cũ.
Giữ module và Chrome cùng hồ sơ kiểm tra
Nên ghi phiên bản Go, module ChromeDP, cdproto và Chrome vào một hồ sơ duy nhất. Một lỗi có thể xuất hiện sau khi browser cập nhật dù mã nguồn không đổi. Ngược lại, thay module trong khi giữ Chrome cũ cũng có thể tạo khác biệt giao thức cần được nhận diện trước khi đổ lỗi cho gateway.
Hướng dẫn quản lý dependencies của Go mô tả cách module được đưa vào go.mod và kiểm tra qua các lệnh Go. Anh em lưu cả go.mod lẫn go.sum để việc xem lại phụ thuộc có căn cứ. Không dùng nhãn latest trong báo cáo như thể đó là một phiên bản có thể tái tạo lâu dài.
Với chương trình mới, có thể tạo một module thử riêng để kiểm tra proxy trước khi thêm tính năng vào ứng dụng chính. Khi phép thử nhỏ chưa chạy được, việc đưa thêm cookie, nhiều tab hay trích xuất hàng loạt chỉ làm tăng số thành phần cần chẩn đoán. Hoàn tất cấu hình browser trước sẽ tiết kiệm công việc sửa sau đó.
Phân biệt Do và Run trong mẫu hiện tại
Ở API hiện tại, Do chạy các action không cần giữ giá trị trả về, còn Run lấy kết quả có kiểu của action. Vì vậy, một ví dụ lấy title có thể dùng Run để nhận chuỗi thay cho việc truyền con trỏ kết quả kiểu cũ. Tương tự, Events là bề mặt cần đối chiếu khi đọc hướng dẫn sự kiện dùng ListenTarget trước đây.
Đừng trộn một nửa mã lấy từ module cũ với một nửa mã lấy từ tài liệu mới. Nếu dự án cần giữ bản đang vận hành, mở đúng tài liệu theo tag đó và ghi rõ phạm vi. Nếu quyết định nâng phiên bản, hãy coi đây là một thay đổi riêng có bước biên dịch cùng kiểm tra browser, thay vì sửa dần cho hết lỗi compiler.

Phiên bản Go Chrome và ChromeDP
ChromeDP proxy với allocator khởi động Chrome
Allocator là thành phần quản lý việc có một browser để thực hiện các action. Khi chương trình tự mở Chrome, NewExecAllocator nhận những tùy chọn khởi động bao gồm ProxyServer. Đặt tùy chọn này trước khi tạo context điều khiển giúp cấu hình gắn với tiến trình browser được khởi tạo.
Chuẩn bị đầu vào cho browser thử
- Tạo thư mục module riêng, chạy go mod init với tên phù hợp của dự án thử.
- Cài module ChromeDP theo phiên bản đã quyết định và kiểm tra phiên bản Go mà module đó yêu cầu.
- Cấp PROXY_SERVER dạng scheme://host:port cho gateway không cần xác thực hoặc đã được cấp quyền theo cơ chế phù hợp.
- Cấp TARGET_URL là trang HTTPS nhỏ được phép mở, tránh bắt đầu bằng một phiên đăng nhập có dữ liệu riêng.
- Xác nhận Chrome hoặc Chromium được tìm thấy trong môi trường chạy; nếu cần, chọn đường dẫn executable trong cấu hình có ghi nhận.
Đoạn chương trình sau minh họa browser dùng proxy rồi lấy title của trang. Nó theo cách gọi Do và Run trong tài liệu hiện tại. Mẫu này chưa xử lý proxy yêu cầu username/password; phần xác thực được trình bày riêng để anh em không hiểu nhầm việc gắn userinfo vào cờ khởi động là đủ.
package main
import (
"context"
"fmt"
"log"
"net/url"
"os"
"time"
"github.com/chromedp/chromedp"
)
func main() {
server := os.Getenv("PROXY_SERVER")
target := os.Getenv("TARGET_URL")
p, err := url.Parse(server)
if err != nil || p.Host == "" || p.User != nil {
log.Print("Use a proxy URI without credentials")
return
}
u, err := url.Parse(target)
if err != nil || u.Scheme != "https" || u.Host == "" {
log.Print("Use an HTTPS target URL")
return
}
options := append(chromedp.DefaultExecAllocatorOptions[:],
chromedp.ProxyServer(server),
)
allocator, closeAllocator := chromedp.NewExecAllocator(
context.Background(), options...)
defer closeAllocator()
browser, closeBrowser := chromedp.NewContext(allocator)
defer closeBrowser()
ctx, cancel := context.WithTimeout(browser, 45*time.Second)
defer cancel()
if err := chromedp.Do(ctx, chromedp.Navigate(target)); err != nil {
log.Print(err)
return
}
title, err := chromedp.Run(ctx, chromedp.Title())
if err != nil {
log.Print(err)
return
}
fmt.Println(title)
}
Hiểu kết quả và vòng đời tài nguyên
Title là dấu hiệu browser đã đọc được một tài liệu có tiêu đề, không phải bằng chứng IP hay dữ liệu nghiệp vụ đúng. Anh em tiếp tục mở endpoint quan sát đường ra trong cùng browser, rồi mới chạy trang đại diện. Mỗi phép đo cần ghi rõ browser nào và cấu hình nào đã tạo ra kết quả.
Các hàm hủy context trong mẫu giúp tài nguyên của phép thử được thu hồi theo phạm vi. Khi phát triển ứng dụng có nhiều tab, không gọi hủy context cha để xử lý lỗi riêng của một tab nếu vẫn cần các tab khác. Ranh giới sở hữu browser cần rõ để một URL lỗi không kéo dừng cả lô công việc.
Timeout bốn mươi lăm giây trong mẫu là hạn minh họa cho chuỗi hành động của phép thử. Nó không phải thời gian chuẩn của ChromeDP hoặc giới hạn mà proxy nào cũng phải đáp ứng. Sau khi biết hành vi trang, anh em chọn hạn phù hợp và tách phần khởi động browser khỏi phần thao tác nếu cần đo riêng.
ChromeDP proxy xác thực qua thử thách của browser
Proxy có tài khoản cần được xử lý theo cách Chrome hỗ trợ, không chỉ qua cách Go parse URI. Thêm username/password vào chuỗi ProxyServer không thay thế luồng xác thực của browser. Một cách có căn cứ là xem ví dụ chính thức của dự án về sự kiện Fetch và phản hồi thử thách xác thực.
Bắt đầu từ ví dụ cục bộ chính thức
Kho ví dụ proxy của ChromeDP dựng máy chủ thử và proxy cục bộ để minh họa xác thực. Giá trị của phép thử nằm ở việc tách hành vi giao thức khỏi endpoint thương mại. Anh em có thể quan sát request cần xác thực mà không gửi thông tin tài khoản dịch vụ ra một website bên ngoài.
Khi dùng mã ví dụ, lấy toàn bộ tệp cùng cấu hình module tương ứng thay vì chép một callback rời. Ví dụ hiện tại có cách đăng ký sự kiện phù hợp API mới, nên một đoạn lấy từ bản cũ có thể không biên dịch cùng phiên bản mới. Ghi commit của kho ví dụ là cách giữ căn cứ cho lần chạy sau.
Để chuyển sang gateway thật, cần thay địa chỉ proxy cục bộ bằng endpoint được cấp và thay tài khoản thử bằng bí mật từ môi trường. Đồng thời, bỏ phần server thử nếu nó không còn cần thiết. Tuy nhiên, không giữ lại log dump toàn request vào nhật ký vận hành vì các header có thể chứa thông tin xác thực.
Thứ tự xử lý Fetch cần đầy đủ
Luồng xử lý gồm đăng ký sự kiện, bật Fetch có HandleAuthRequests, tiếp tục request bị tạm dừng và trả lời AuthRequired. Nếu chỉ bật Fetch nhưng quên ContinueRequest, trang có thể đứng chờ. Tình huống đó dễ bị hiểu nhầm là proxy chậm, dù browser đang chờ chính mã điều khiển cho phép tiếp tục.
Anh em cần kiểm tra nguồn thử thách là Proxy trước khi cung cấp tài khoản gateway. Một thử thách từ website là lớp xác thực khác; gửi tài khoản proxy vào đó là sai phạm vi. Với thử thách không thuộc cấu hình đã cho phép, hãy dùng hành vi mặc định hoặc hủy theo chính sách ứng dụng thay vì cung cấp bí mật chung.
Mỗi request cũng cần hạn số lần trả lời cùng một thử thách. Nếu mật khẩu sai mà chương trình liên tục cung cấp lại, công việc có thể lặp mà không tiến triển. Hãy trả lỗi rõ sau số lần cho phép trong phép thử và báo người vận hành sửa cấu hình, thay vì mở thêm browser với cùng tài khoản sai.

Luồng xác thực proxy của browser
ChromeDP proxy với cấu hình Chromium và bypass
Chrome có chính sách mạng riêng có thể làm phép đo đi khác tuyến mong đợi. Trước khi xem gateway là nguyên nhân, anh em cần xem cờ khởi động, danh sách bypass và những chính sách tổ chức đang áp dụng. Một cấu hình được đặt trong mã chưa chứng minh browser thực sự chạy với đúng các đối số đó.
Cờ proxy và danh sách đi trực tiếp
Tài liệu Network Settings của Chromium mô tả các cờ như proxy-server, proxy-bypass-list và no-proxy-server. Đối với một phép thử, hãy kiểm tra không có tùy chọn đối nghịch làm kết quả khó giải thích. Việc dùng nhiều nguồn cấu hình mà không ghi thứ tự ưu tiên thường khiến lỗi chỉ xuất hiện trên một máy.
Browser mặc định có hành vi bypass dành cho loopback, điều được ví dụ proxy cục bộ của ChromeDP lưu ý. Vì vậy, kiểm tra một server localhost mà không xét bypass có thể cho kết quả trực tiếp dù proxy đã được đặt. Khi cần kiểm tra đúng trường hợp đó, dùng tùy chọn có căn cứ trong môi trường thử, không tự mở rộng bypass trong production.
Đừng thêm direct:// vào danh sách dự phòng nếu yêu cầu công việc là chỉ dùng đường proxy. Khi endpoint lỗi, fallback trực tiếp có thể khiến phép thử nhìn như thành công nhưng sai tuyến. Cấu hình nên làm rõ lúc nào được phép đi trực tiếp và lúc nào cần dừng với lỗi có thể truy vết.
Proxy từ xa cần được đặt nơi browser chạy
NewRemoteAllocator kết nối đến một browser đã được mở ở nơi khác. Các cờ khởi động tại ứng dụng Go không tự thay đổi tiến trình browser từ xa đang chạy. Anh em cần cấp proxy tại phía quản lý browser hoặc dùng cơ chế được dịch vụ đó hỗ trợ, rồi kiểm tra từ chính phiên đã kết nối.
Trong mô hình container, endpoint DevTools và endpoint proxy là hai địa chỉ khác mục đích. URL WebSocket phục vụ điều khiển không phải địa chỉ để Chrome gửi lưu lượng website qua. Một cấu hình có tên biến rõ cho từng loại sẽ giúp tránh việc sao chép nhầm host và cổng khi triển khai.
Ranh giới mạng cũng thay đổi theo vị trí browser. Gateway truy cập được từ máy Go chưa chứng minh nó truy cập được từ container Chrome ở mạng khác. Hãy kiểm tra kết nối ở nơi browser thực sự chạy trước khi phân tích hành vi selector hay thay đổi mã đọc DOM.
ChromeDP proxy với trang JavaScript và điều kiện chờ
Sau khi tuyến mạng đúng, bước tiếp theo là xác định lúc dữ liệu cần đọc đã tồn tại. Một khoảng ngủ cố định có thể tình cờ đủ ở máy này nhưng thiếu ở máy khác. Điều kiện gắn với nội dung giúp tác vụ phản ứng theo trạng thái thật của trang.
Chờ một dấu hiệu có ý nghĩa nghiệp vụ
Với bảng dữ liệu, hãy đợi vùng kết quả có dòng hoặc một phần tử được website dùng để báo tải xong. Nếu trang có trạng thái không có kết quả, điều kiện cũng cần chấp nhận trạng thái đó. Chỉ đợi một selector dữ liệu không tồn tại trong trường hợp rỗng sẽ biến kết quả hợp lệ thành timeout giả.
API ChromeDP cung cấp action điều hướng, đọc nội dung và chờ phần tử. Cách dùng selector hiện tại cần được đối chiếu với phiên bản đã chọn, đặc biệt khi chuyển từ các ví dụ truyền chuỗi và tùy chọn cũ. Anh em nên giữ selector trong lớp riêng để thay khi cấu trúc website đổi.
// After Navigate, inside a function with ctx available.
if err := chromedp.Do(ctx,
chromedp.WaitVisible(chromedp.CSS("main")),
); err != nil {
return err
}
text, err := chromedp.Run(ctx,
chromedp.Text(chromedp.CSS("main")),
)
if err != nil {
return err
}
fmt.Println(text)
Đây là đoạn tích hợp vào hàm có context và kiểu trả về error, chưa phải một tệp main độc lập. Selector main chỉ minh họa cách đọc vùng nội dung; không dùng nó như quy tắc chung cho mọi website. Với trang nghiệp vụ, thay bằng vùng cụ thể và kiểm tra các trường đầu ra thay vì chỉ in toàn bộ văn bản.
Phân biệt chờ DOM và chờ mạng
Trang có thể mở xong nhưng JavaScript chưa nhận dữ liệu, hoặc request dữ liệu đã trả về nhưng giao diện chưa dựng xong. Hai trạng thái cần dấu hiệu quan sát khác nhau. Nếu tác vụ thường lỗi tại bước chờ, hãy giữ ảnh cùng đoạn DOM phù hợp để xác định trang đang hiển thị gì, không chỉ tăng timeout.
Một trang có quảng cáo hoặc kết nối dài cũng có thể tiếp tục hoạt động mạng sau khi dữ liệu cần đọc đã sẵn sàng. Vì vậy, điều kiện chờ toàn mạng yên lặng không phải lựa chọn phù hợp cho mọi ứng dụng. Nên bám vào điều kiện nghiệp vụ nhỏ nhất có thể chứng minh dữ liệu đã đọc được.

Chờ dữ liệu thay cho ngủ cố định
ChromeDP proxy với tài nguyên con và phiên đăng nhập
Một lần mở trang có thể tải nhiều tài nguyên từ nhiều hostname. Điều này làm kiểm tra proxy trong browser khác với kiểm tra một GET đơn. Cookie, bộ nhớ đệm, service worker và trạng thái đăng nhập có thể ảnh hưởng việc request nào thật sự được gửi trong mỗi lần chạy.
Dùng profile thử tách biệt
Anh em nên tạo profile dành cho phép thử thay vì dùng profile cá nhân đang đăng nhập. Profile mới giúp quan sát luồng tải mà không mang theo lịch sử và cookie không liên quan. Đồng thời, việc xóa dữ liệu của phép thử có phạm vi rõ, tránh ảnh hưởng phiên duyệt web của người vận hành.
Khi cần tái tạo một phiên được cấp quyền, hãy xác định dữ liệu nào được phép lưu và thời điểm phải xóa. Không đưa cookie thật vào kho mã hoặc ảnh bài viết. Một ảnh chụp chứng minh giao diện có dữ liệu nên được loại thông tin cá nhân và chỉ giữ phần cần phục vụ nghiệm thu.
Nếu website giữ phiên gắn với đường ra, hãy duy trì cấu hình browser phù hợp trong suốt chuỗi thao tác. Đổi proxy giữa các bước không tự cập nhật cookie và trạng thái phía máy chủ. Khi đường truyền hỏng, cần có quy trình biết bước nào có thể tiếp tục và bước nào phải bắt đầu lại.
Quan sát đủ các request cần thiết
Phép kiểm tra IP ở trang chính hữu ích nhưng không chứng minh mọi cơ chế mạng có cùng hành vi. Đối với tác vụ nhạy về tuyến, cần kiểm kê các loại request mà ứng dụng sử dụng và cách browser xử lý chúng. Phạm vi nghiệm thu nên được ghi cụ thể thay vì dùng một dòng kết luận mọi lưu lượng đã an toàn.
Proxy cũng không tự biến browser thành công cụ ẩn danh hoặc bảo đảm website chấp nhận tự động hóa. Khi gặp thử thách truy cập, hãy kiểm tra quyền, chính sách và phương thức tích hợp được hỗ trợ. Việc đổi endpoint liên tục mà không xử lý nguyên nhân có thể làm công việc khó theo dõi hơn.
ChromeDP proxy với lỗi cần chẩn đoán theo lớp
Một báo cáo lỗi nên nói được giai đoạn nào đã chạy đến nơi. Lỗi không tìm thấy Chrome khác lỗi DevTools mất kết nối; lỗi proxy khác lỗi selector. Phân nhóm theo lớp giúp anh em sửa đúng thành phần và giữ việc thử lại trong mức có ích.
Kiểm tra từ khởi động đến dữ liệu
- Không khởi động được browser: kiểm tra executable, quyền chạy, thư viện hệ thống và phiên bản; chưa cần thay tài khoản proxy.
- Không kết nối được DevTools: kiểm tra nơi browser đang chạy, URL điều khiển và thời hạn; phân biệt với tuyến website.
- Proxy không chấp nhận xác thực: kiểm tra scheme, endpoint, tài khoản cùng luồng Fetch trước khi tăng số tab.
- Trang đứng sau khi bật Fetch: kiểm tra request bị tạm dừng đã được tiếp tục và sự kiện đã được đăng ký đúng thứ tự.
- TLS báo lỗi: kiểm tra hostname, kho chứng chỉ và mạng tổ chức; giữ việc xác minh danh tính đích.
- DOM không có dữ liệu: kiểm tra nội dung phản hồi, trang đăng nhập và selector trước khi kết luận gateway hỏng.
CDP miền Fetch là tài liệu để đối chiếu requestPaused, authRequired và continueWithAuth. Tuy nhiên phiên bản giao thức mà browser thực sự hỗ trợ vẫn cần đi cùng module Go đang dùng. Không coi mô tả tip of tree là bằng chứng mọi Chrome cũ có hành vi y hệt.
Giữ log hữu ích và có giới hạn
Log debug của giao thức có thể chứa URL, header và nội dung tương tác. Chỉ bật khi có mục đích chẩn đoán, giữ thời hạn lưu và loại bí mật trước khi chia sẻ. Nhật ký mặc định nên ghi mã công việc, nhãn browser, giai đoạn và loại lỗi thay vì dump toàn phiên.
Khi retry, tạo ranh giới rõ giữa thử lại hành động trong tab và khởi động browser mới. Mở browser mới tốn tài nguyên và có thể mất trạng thái phiên, nên không dùng làm phản xạ cho mọi lỗi. Một điều kiện dừng sau chuỗi lỗi giống nhau sẽ giúp giữ bằng chứng để sửa nguyên nhân.

Nghiệm thu tuyến và vòng đời browser
ChromeDP proxy với chi phí tải và nghiệm thu
Chi phí của browser gồm tiến trình, bộ nhớ, script và các tài nguyên trang, không chỉ lượng dữ liệu chính. Bởi vậy, số tab đồng thời cần được chọn từ phép đo tác vụ đại diện. Không lấy khả năng tạo goroutine nhanh của Go làm căn cứ cho số browser có thể chạy ổn định.
Đo theo dữ liệu hợp lệ
Anh em nên đo thời gian khởi động, thời gian đến dữ liệu, số trang đạt hợp đồng và lỗi theo nhóm. Ghi cả tài nguyên máy chạy để nhận ra tình trạng browser bị thiếu bộ nhớ. Nếu chỉ đo tổng số URL đã mở, báo cáo có thể tính cả trang lỗi và trang đăng nhập như kết quả thành công.
Khi cần mua proxy uy tín, hãy mô tả trước rằng công việc chạy Chrome, số phiên đồng thời dự kiến và nhu cầu giữ đường ra cho phiên đăng nhập. Sau khi nhận endpoint, nghiệm thu bằng browser của chính môi trường triển khai rồi mới tăng tải, thay vì suy ra tương thích từ kết quả của một lệnh HTTP riêng.
Anh em có thể xem vai trò Web Scraping proxy để đặt đường truyền trong quy trình lấy dữ liệu. Riêng với ChromeDP, bản kiểm tra cần ghi rõ proxy browser, proxy của request Go nếu có và những phần chưa được thử. Cách ghi này giúp lần bàn giao giữ đúng phạm vi bằng chứng.
Hồ sơ có thể chạy lại
Hồ sơ nghiệm thu nên gồm phiên bản Chrome, Go, module, cấu hình đã che bí mật và URL thử được cho phép. Thêm kết quả kỳ vọng cho lỗi thiếu cấu hình, xác thực sai và DOM không đúng. Khi một nhánh chưa được chạy, đánh dấu chưa thử thay vì điền kết quả dự đoán vào cột đã đạt.
Trước khi đưa vào lịch tự động, kiểm tra đóng browser, dừng khi hết hạn và lưu phần công việc chưa xong. Một chương trình hoàn tất lấy dữ liệu nhưng để lại nhiều tiến trình Chrome vẫn chưa kết thúc tốt về vận hành. Giới hạn tải cùng vòng đời tài nguyên là phần cần nghiệm thu ngay từ bản đầu.
ChromeDP proxy tổng kết cách triển khai
ChromeDP proxy cần cấu hình ở browser, xử lý xác thực đúng thử thách và kiểm tra dữ liệu sau khi trang sẵn sàng. Anh em hãy ghi phiên bản API, đo riêng tuyến Go và Chrome rồi mới mở rộng số phiên. Theo dõi Proxy.vn - Nhà cung cấp dịch vụ proxy chất lượng hàng đầu Việt Nam để trao đổi cấu hình ChromeDP proxy.