Chromedp Proxy và Cách Sử Dụng Proxy với chromedp vào năm 2026
Tóm tắt
Một proxy chromedp được cấu hình khi Chrome khởi động. Truyền điểm cuối thông qua chromedp.ProxyServer, điều này ánh xạ đến cờ --proxy-server của Chrome.
Không đưa thông tin xác thực proxy vào trong ProxyServer. Xử lý thách thức 407 thông qua miền Fetch của Giao thức DevTools của Chrome và cung cấp thông tin xác thực với ContinueWithAuth.
Thay đổi ProxyServer sẽ không quay vòng một trình duyệt đang chạy. Bắt đầu một bộ phân bổ thực thi mới cho mỗi điểm cuối được chọn bởi ứng dụng, hoặc sử dụng một cổng cung cấp duy nhất mà xoay vòng ra ngoài nguồn.
Việc điều hướng thành công không đủ bằng chứng. Đọc một dấu hiệu DOM đã biết hoặc phản hồi kiểm tra IP được ủy quyền và xác nhận rằng trình duyệt đã sử dụng tuyến đường mong đợi.
Kho lưu trữ có tên tương tự chromedp-proxy là một công cụ ghi log CDP. Đây không phải là cài đặt điều hướng lưu lượng web ra bên ngoài của Chrome.
Proxy chromedp là gì?
Một proxy chromedp là một tuyến đường mạng ra ngoài được gán cho quy trình Chrome mà chromedp điều khiển. Tài liệu tài liệu chính thức của gói chromedp mô tả chromedp là một thư viện tự động hóa trình duyệt cấp cao cho Giao thức DevTools của Chrome. Tùy chọn phân bổ ProxyServer của nó cung cấp giá trị lệnh dòng lệnh proxy-server của Chrome trước khi trình duyệt khởi động.
Chu trình này là ý tưởng chính. Một proxy không phải là tùy chọn mỗi lần điều hướng trong chromedp.Navigate. Nó thuộc về một ExecAllocator, tạo ra một quy trình Chrome, và mỗi tab hoặc mục tiêu sử dụng quy trình đó kế thừa tuyến đường. Chrome gửi lưu lượng trình duyệt qua điểm cuối trong khi chromedp tiếp tục điều khiển điều hướng, nhấp chuột, chờ đợi và trích xuất DOM qua CDP.
Trải nghiem Nstproxy - Bat dau dung thu mien phi ngay
Kết quả tìm kiếm cũng hiện ra một dự án có tên chromedp-proxy. Kho lưu trữ đó ghi lại và phát lại thông điệp CDP để gỡ lỗi; nó không thay thế chromedp.ProxyServer cho lưu lượng HTTP hoặc HTTPS ra ngoài. Hướng dẫn này sử dụng “proxy chromedp” để chỉ định proxy mạng bên ngoài của trình duyệt.
Sử dụng một proxy khi một quy trình tự động hóa được ủy quyền cần kiểm soát luồng ra, kiểm tra nhận thức vị trí, xác minh quảng cáo, giám sát trang công cộng, hoặc cách ly giữa các công việc. Một proxy thay đổi tuyến đường; nó không cấp quyền truy cập vào đích đến hoặc làm cho các bộ chọn dễ vỡ trở nên đáng tin cậy.
Đối với một tuyến đường được quản lý, Nstproxy Residential Prime Proxies cung cấp các điểm cuối proxy chuẩn có thể được gán tại cùng ranh giới quy trình Chrome.
Cách hoạt động của Điều hướng Proxy trong chromedp
Tuyến đường được xác định trước khi Chrome khởi động:
Xây dựng các tùy chọn phân bổ từ chromedp.DefaultExecAllocatorOptions.
Thêm chromedp.ProxyServer("http://host:port").
Tạo một bộ phân bổ thực thi với chromedp.NewExecAllocator.
Tạo một ngữ cảnh trình duyệt từ bộ phân bổ và thực hiện các hành động điều hướng.
Hủy cả hai ngữ cảnh khi công việc kết thúc để giải phóng Chrome và các tài nguyên của nó.
Lịch sử phát hành hiện tại chromedp release history liệt kê v0.15.1 là phiên bản mới nhất vào thời điểm thử nghiệm. Các ví dụ dưới đây chỉ định phiên bản đó và được biên dịch với Go 1.26.7 chống lại Google Chrome vào ngày 20 tháng 8 năm 2026.
Đối với các cổng proxy HTTP, một URL như http://proxy.example:9000 có thể định tuyến cả trang HTTP và trang HTTPS. Chrome sử dụng CONNECT cho các điểm đến HTTPS. Giữ xác minh TLS được bật; bỏ qua lỗi chứng chỉ ẩn giấu vấn đề cấu hình và làm yếu bài kiểm tra chấp nhận.
Các yêu cầu tiên quyết và Cấu hình an toàn
Tạo một mô-đun Go nhỏ và cài đặt phụ thuộc đã được thử nghiệm:
go mod init chromedp-proxy-example
go get github.com/chromedp/chromedp@v0.15.1
Đặt đường dẫn thực thi Chrome, điểm cuối proxy, và một mục tiêu được ủy quyền thông qua cấu hình thời gian chạy được bảo vệ:
Sử dụng đường dẫn Chrome thực tế của nền tảng của bạn. Giữ cho các điểm cuối và thông tin xác thực ra khỏi các kho lưu trữ, ảnh chụp màn hình, nhãn số liệu, và nhật ký ứng dụng. Các ví dụ sẽ thất bại nhanh chóng khi một giá trị cần thiết bị thiếu và đặt một giới hạn 20 giây quanh tác vụ của trình duyệt.
Có ba phương pháp thực tiễn: khởi động Chrome với một proxy thông thường, trả lời thách thức xác thực proxy thông qua CDP, hoặc khởi động các bộ phân bổ trình duyệt riêng biệt cho nhiều điểm cuối. Mỗi ví dụ hoàn chỉnh bên dưới được chạy trên một proxy được xây dựng cho mục đích địa phương. Nội dung trả về xác định cổng lắng nghe thực tế, vì vậy các kiểm tra kiểm tra định tuyến thay vì chỉ khởi động trình duyệt thành công.
Phương pháp 1: Khởi động Chrome với một Proxy
Sử dụng chromedp.ProxyServer khi điểm cuối không yêu cầu một thách thức xác thực do trình duyệt xử lý. Các tùy chọn bộ phân bổ phải được hoàn thiện trước khi gọi NewExecAllocator.
package main
import("context""fmt""log""os""time""github.com/chromedp/chromedp")funcmain(){ proxyURL :=mustEnv("PROXY_URL") targetURL :=mustEnv("TARGET_URL") opts :=append(chromedp.DefaultExecAllocatorOptions[:], chromedp.ExecPath(mustEnv("CHROME_PATH")), chromedp.ProxyServer(proxyURL),) allocCtx, cancelAlloc := chromedp.NewExecAllocator(context.Background(), opts...)defercancelAlloc() ctx, cancelBrowser := chromedp.NewContext(allocCtx)defercancelBrowser() ctx, cancelTimeout := context.WithTimeout(ctx,20*time.Second)defercancelTimeout()var body stringif err := chromedp.Run(ctx, chromedp.Navigate(targetURL), chromedp.Text("body",&body, chromedp.ByQuery),); err !=nil{ log.Fatal(err)} fmt.Println(body)}funcmustEnv(name string)string{ value := os.Getenv(name)if value ==""{ log.Fatalf("%s là bắt buộc", name)}return value
}
Điểm xác minh trên cổng 18380 đã trả về basic_proxy_port_18380, và chương trình đã in ra chính xác văn bản DOM đó. Thay thế in nội dung trong sản xuất bằng một dấu hiệu định tuyến không nhạy cảm, tiêu đề đã render, hoặc phần tử trang mong đợi.
Đừng dựa vào việc phát hiện tệp thực thi mặc định của Chrome trong một triển khai có kiểm soát. Một đường dẫn rõ ràng khiến hành vi của địa phương, container và CI dễ so sánh hơn. Kiểm tra các quy tắc bỏ qua nếu các điểm đích nội bộ hoặc địa phương tránh proxy một cách bất ngờ. Hướng dẫn cài đặt proxy Chrome của Nstproxy giải thích những khái niệm ở cấp độ trình duyệt tương tự bên ngoài Go.
Phương pháp 2: Xác thực một Proxy chromedp thông qua CDP
Chrome không chấp nhận một cách đáng tin cậy giá trị username:password@host:port như là giá trị --proxy-server. Hãy truyền một điểm cuối không có thông tin xác thực vào ProxyServer, kích hoạt miền Fetch, và chỉ trả lời những thách thức mà nguồn gốc của nó là Proxy. Giao thức DevTools của Chrome miền Fetch định nghĩa handleAuthRequests và continueWithAuth; ví dụ proxy xác thực chính thức của chromedp sử dụng cùng một mẫu điều khiển sự kiện.
Chạy nó với PROXY_USERNAME và PROXY_PASSWORD được cung cấp bởi hệ thống bí mật của bạn. Trong bài kiểm tra, proxy đã trả về 407 cho đến khi bộ xử lý Fetch cung cấp các giá trị chính xác; dấu hiệu DOM cuối cùng là authenticated_proxy_port_18381.
Các goroutine là có chủ ý. Một callback sự kiện chromedp không được đồng bộ gọi một chromedp.Run khác đang chặn trên cùng một mục tiêu. Tiếp tục các yêu cầu đã tạm dừng kịp thời, hạn chế thông tin xác thực cho các thách thức proxy, và hủy đăng ký lắng nghe sau khi thách thức mong muốn được xử lý. Nếu mục tiêu cũng sử dụng xác thực HTTP, hãy xây dựng một quy tắc riêng thay vì gửi bí mật proxy.
Phương pháp 3: Lặp lại Proxy với một Bộ cấp phát Trình duyệt Mới
Sử dụng một bộ cấp phát thực thi mới cho mỗi điểm kết thúc được chọn bởi ứng dụng vì ProxyServer là cờ của tiến trình Chrome. Thay đổi một biến Go không thể định tuyến lại một trình duyệt đã chạy.
package main
import("context""fmt""log""os""strings""time""github.com/chromedp/chromedp")funcmain(){for_, proxyURL :=range strings.Split(mustEnv("PROXY_URLS"),","){ body, err :=browseWithProxy(strings.TrimSpace(proxyURL),mustEnv("TARGET_URL"))if err !=nil{ log.Printf("%s: %v", proxyURL, err)continue} fmt.Printf("%s -> %s\n", proxyURL, body)}}funcbrowseWithProxy(proxyURL, targetURL string)(string,error){ opts :=append(chromedp.DefaultExecAllocatorOptions[:], chromedp.ExecPath(mustEnv("CHROME_PATH")), chromedp.ProxyServer(proxyURL),) allocCtx, cancelAlloc := chromedp.NewExecAllocator(context.Background(), opts...)defercancelAlloc() ctx, cancelBrowser := chromedp.NewContext(allocCtx)defercancelBrowser() ctx, cancelTimeout := context.WithTimeout(ctx,20*time.Second)defercancelTimeout()var body string err := chromedp.Run(ctx, chromedp.Navigate(targetURL), chromedp.Text("body",&body, chromedp.ByQuery),)return body, err
}funcmustEnv(name string)string{ value := os.Getenv(name)if value ==""{ log.Fatalf("%s là bắt buộc", name)}return value
}
Với các cổng 18380 và 18382, đầu ra báo cáo basic_proxy_port_18380 tiếp theo là rotated_proxy_port_18382. Việc dọn dẹp nằm bên trong browseWithProxy, vì vậy các cuộc gọi defer thực thi sau mỗi vòng lặp thay vì tích lũy cho đến khi một vòng lặp lớn kết thúc.
Bắt đầu Chrome cho mỗi điểm truy cập tốn nhiều CPU và độ trễ hơn so với việc tái sử dụng một quy trình. Đối với các công việc độc lập, giữ độ song song trong giới hạn và ghi lại một ID điểm truy cập không bí mật, độ trễ bắt đầu, độ trễ điều hướng, và loại lỗi. Đối với các luồng có trạng thái, giữ cookie, tab, và tuyến proxy cùng nhau cho phiên yêu cầu. Nếu một cổng có thể đảo vòng hoặc giữ một phiên trên, việc quay vòng phía nhà cung cấp giúp tránh khởi động một quy trình chỉ để thay đổi điểm ra. So sánh mô hình này với các lựa chọn quá trình và ngữ cảnh trong hướng dẫn proxy Puppeteer.
Cách xác minh tuyến proxy
Xác minh tuyến, kết quả trình duyệt và quy trình chi tiết một cách riêng biệt. Đầu tiên, điều hướng đến một trang phản ánh IP được ủy quyền hoặc trang chẩn đoán có kiểm soát thông qua proxy và so sánh địa chỉ hoặc dấu hiệu tuyến được quan sát với phiên nhà cung cấp. Thứ hai, yêu cầu tiêu đề, phần tử hoặc trạng thái ứng dụng như mong đợi sau khi JavaScript chạy. Thứ ba, ghi lại một tập hợp thời gian và lớp lỗi hạn chế mà không ghi lại thông tin đăng nhập hoặc nội dung trang nhạy cảm.
Một lần điều hướng trả về HTML vẫn có thể sai. Các trang lỗi proxy, trang đăng nhập, màn hình đồng ý, và các trang chặn có thể đều tạo ra tài liệu. Yêu cầu một dấu hiệu dễ nhận biết và từ chối nội dung không mong đợi trước khi thực hiện các hành động tiếp theo. Hướng dẫn khắc phục sự cố proxy Playwright đề cập đến các triệu chứng định tuyến trình duyệt liên quan, cũng giúp khi tách biệt các lỗi Chrome, DNS, xác thực và phản hồi từ mục tiêu.
Để có chứng cứ mạng sâu hơn, lắng nghe các sự kiện CDP Network và ghi lại URL và trạng thái của tài liệu chính. Giữ các kiểm tra có thể quan sát nhưng tối thiểu: ghi lại khối lượng phản hồi cao có thể tiết lộ dữ liệu và tạo ra tiếng ồn.
Chọn tuyến Nstproxy cho chromedp
Các proxy cao cấp Nstproxy Residential phù hợp với quy trình làm việc chromedp cần các điểm truy cập xác thực tiêu chuẩn, vị trí có thể chọn và các phiên quay vòng hoặc cố định trên bề mặt sản phẩm hiện tại. Chrome nhận một điểm truy cập proxy bình thường, vì vậy tích hợp giữ trong mã phân bổ và Fetch-domain thay vì SDK trình duyệt cụ thể của nhà cung cấp.
Sử dụng phiên cố định khi một luồng trình duyệt nhiều bước phụ thuộc vào cookie hoặc một danh tính ổn định.
Sử dụng quay vòng cho các kiểm tra có ủy quyền độc lập, nơi mỗi công việc có thể chịu đựng một điểm ra khác nhau.
Bắt đầu với lưu lượng đã đo và so sánh mô hình gói hiện tại và trả tiền theo mức sử dụng trên trang giá Residential Prime.
Kiểm tra đích đến chính xác, vùng, hành vi phiên, và quy trình xác thực trước khi tăng độ song song. Định tuyến proxy không thay thế chiến lược chờ trình duyệt hoặc xác thực bộ chọn. So sánh các công cụ tự động hóa trình duyệt có thể giúp nếu lựa chọn rộng hơn giữa chromedp và một ngăn xếp tự động hóa khác vẫn còn mở.
Bộ phân bổ không nhận được ProxyServer, hoặc một qui tắc bỏ qua phù hợp
Xây dựng các tùy chọn trước khi NewExecAllocator; kiểm tra các quy tắc bỏ qua; xác minh với một dấu hiệu có kiểm soát.
407 Proxy Authentication Required
Điểm truy cập cần thông tin đăng nhập
Kích hoạt xử lý xác thực Fetch, chỉ trả lời các thử thách proxy, và xác minh bí mật mà không in chúng ra.
Điều hướng bị treo sau khi kích hoạt Fetch
Các yêu cầu tạm dừng chưa bao giờ được tiếp tục, hoặc callback sự kiện bị chặn
Xử lý EventRequestPaused và thực hiện các hành động tiếp tục trong goroutines.
Quay vòng giữ cùng một điểm ra
Quy trình Chrome giống nhau đang được tái sử dụng, hoặc phiên nhà cung cấp là cố định
Tạo một bộ phân bổ mới cho mỗi điểm truy cập, hoặc thay đổi định danh phiên của nhà cung cấp.
ERR_PROXY_CONNECTION_FAILED
Lỗi định dạng, máy chủ, cổng, hoặc điểm truy cập không thể truy cập
Kiểm tra khả năng truy cập điểm truy cập, xác nhận giao thức, và sử dụng thời gian chờ hạn chế.
Trang tải nhưng các bộ chọn thất bại
Phản hồi là một lỗi hoặc trang thay thế, hoặc thời gian chờ là sai
Kiểm tra tiêu đề và một dấu hiệu DOM được biết đến; tách biệt định tuyến, kết xuất, và trích xuất.
Các quy trình Chrome tích tụ
Bộ phân bổ hoặc ngữ cảnh trình duyệt không bị hủy
Kết hợp mọi ngữ cảnh đã tạo với việc dọn dẹp tại phạm vi công việc đúng.
Các thử lại nên có chọn lọc và có giới hạn. Thử lại các lỗi kết nối tạm thời và cổng với độ trễ; không vòng vô hạn trên thông tin đăng nhập xấu, mục tiêu bị cấm, hoặc nội dung cấu trúc không hợp lệ. Cách ly các điểm truy cập không thể tiếp tục và chỉ bảo tồn các thông tin chẩn đoán không bí mật.
Kết Luận
Một cài đặt proxy chromedp đáng tin cậy bắt đầu tại biên giới quy trình Chrome. Sử dụng chromedp.ProxyServer cho một điểm cuối bình thường, miền Fetch cho một thử thách xác thực 407 và một bộ phân bổ mới khi ứng dụng Go của bạn thay đổi rõ ràng các điểm cuối. Sau đó, chứng minh lộ trình với một phản hồi kiểm soát và xác thực riêng biệt trang đã được hiển thị.
Bắt đầu với một đích đến được ủy quyền và một proxy. Khi lộ trình, xác thực, dọn dẹp và kiểm tra chấp nhận trang có thể lặp lại, thêm xoay vòng và đồng thời theo nhu cầu đã đo lường.
Trải nghiệm Nstproxy — Bắt đầu dùng thử miễn phí của bạn hôm nay
Q: Tôi có thể đặt tên người dùng và mật khẩu trong chromedp.ProxyServer không?
Đừng dựa vào thông tin xác thực được nhúng trong giá trị proxy-server. Chuyển host và cổng đến ProxyServer, bật các sự kiện xác thực Fetch, và cung cấp bí mật với fetch.ContinueWithAuth sau một thử thách proxy.
Q: Liệu chromedp có thể thay đổi proxy mà không khởi động lại Chrome không?
Không qua ProxyServer, vì nó trở thành một cờ quy trình Chrome khi khởi chạy. Bắt đầu một bộ phân bổ thực thi mới cho một điểm cuối được chọn bởi ứng dụng khác, hoặc sử dụng một cổng mà thay đổi lối ra trong khi địa chỉ của nó vẫn giữ nguyên.
Q: Liệu proxy chromedp có hoạt động với các trang HTTPS không?
Có. Một proxy HTTP thường xuyên hầm các đích HTTPS với CONNECT. Giữ xác minh chứng chỉ được bật và xác nhận rằng mục tiêu thấy lộ trình thoát mong muốn.
Q: Tại sao chromedp lại treo khi tôi bật miền Fetch?
Fetch tạm dừng các yêu cầu khớp. Tiếp tục các sự kiện EventRequestPaused và tránh chặn trình nghe chromedp bằng cách thực hiện các hành động tiếp tục trong goroutines.
Q: Dự án chromedp-proxy trên GitHub có cần thiết cho các proxy đầu ra không?
Không. Dự án có tên tương tự đó là một công cụ ghi log và phát lại CDP; định tuyến trình duyệt đầu ra sử dụng chromedp.ProxyServer và, khi cần thiết, xử lý xác thực CDP.
Marcus Chen
Aug. 20th 2026
110M+ IP that voi ti le truy cap thanh cong 99.9%
Phan hoi trung binh ~0.5s cho tac vu dong thoi cao
Chi tu $0.1/GB
Truy cap ngay cac pool proxy residential, datacenter, IPv6 va ISP cao cap.