Selenium/Puppeteer khi chạy nhiều browser profile, làm sao để giữ môi trường thực sự độc lập?
Khi chạy nhiều tệp cấu hình trình duyệt trong Selenium/Puppeteer, việc duy trì các môi trường thực sự độc lập phụ thuộc vào việc đạt được sự cô lập hoàn toàn trên ba lớp: lưu trữ, nhận dạng dấu vân tay và mạng. Sau đây là các chiến lược và thực tiễn tốt nhất quan trọng . I. Cách ly lưu trữ: Nền tảng cốt lõi lưu trữ hồ sơ trình duyệt là nơi dễ xảy ra xung đột nhất. Nhiều phiên bản cùng chia sẻ một thư mục có thể dẫn đến hỏng dữ liệu giữa cookie , LocalStorage và bộ nhớ đệm. 1.1 Chỉ định thư mục dữ liệu người dùng riêng biệt cho mỗi phiên bản Mỗi phiên bản phải sử dụng một thư mục dữ liệu người dùng riêng biệt; đây là tuyến phòng thủ đầu tiên chống lại sự cô lập. Python from selenium import webdriver from selenium.webdriver.chrome.options import Options nhập tệp tạm thời, hệ điều hành
cho i trong phạm vi (3): profile_dir = tempfile.mkdtemp(prefix=f"profile_{i}_") tùy chọn = Tùy chọn() options.add_argument(f"--user-data-dir={profile_dir}") trình điều khiển = webdriver.Chrome(options=options)
JavaScript const fs = require('fs'); const os = require('os'); const path = require('path'); const puppeteer = require('puppeteer');
const userDataDir = fs.mkdtempSync(path.join(os.tmpdir(), 'pptr-')); const browser = await puppeteer.launch({ userDataDir });
Nguyên tắc quan trọng: Không bao giờ cho phép nhiều phiên bản đồng thời trỏ đến cùng một thư mục dữ liệu người dùng. Ngay cả khi các thư mục giống nhau, Chrome sẽ ngăn phiên bản thứ hai khởi động bằng cách sử dụng tệp khóa (lockfile/SingletonLock) và sẽ báo lỗi ProcessSingleton. Nếu bạn thực sự cần chia sẻ cấu hình cơ bản, hãy sao chép thư mục cấu hình sang một đường dẫn riêng biệt trước khi sử dụng. 1.2 Sử dụng thư mục tạm thời so với thư mục cố định Chọn chiến lược lưu trữ phù hợp với tình huống kinh doanh: Kiểm thử ngắn hạn/các tác vụ đơn lẻ : Sử dụng thư mục tạm thời của hệ thống (chẳng hạn như mkdtemp ) để mỗi lần chạy là một môi trường hoàn toàn mới. Việc duy trì trạng thái đăng nhập là cần thiết : Hãy sử dụng thư mục cố định, nhưng đảm bảo rằng mỗi tệp cấu hình có thư mục cha riêng biệt. Nhiều tệp cấu hình cùng chia sẻ một thư mục cha cũng có thể gây ra xung đột. II. Bối cảnh trình duyệt của người điều khiển rối Puppeteer cung cấp cơ chế BrowserContext cho phép tạo nhiều phiên duyệt web riêng biệt trong cùng một tiến trình trình duyệt . Mỗi ngữ cảnh có cookie , localStorage , sessionStorage và bộ nhớ cache riêng. JavaScript const browser = await puppeteer.launch(); const context1 = await browser.createIncognitoBrowserContext(); const context2 = await browser.createIncognitoBrowserContext();
const page1 = await context1.newPage(); const page2 = await context2.newPage(); // Trang 1 và Trang 2 hoàn toàn độc lập và không ảnh hưởng lẫn nhau.
Những điểm khác biệt chính: BrowserContext cung cấp khả năng cách ly trong cùng một tiến trình , phù hợp với các trường hợp không yêu cầu cách ly hoàn toàn dấu vân tay kỹ thuật số. Nếu cần cách ly hoàn toàn dấu vân tay ( Canvas , WebGL , Audio , v.v.), phương pháp tốt nhất cho Puppeteer vẫn là khởi chạy một phiên bản trình duyệt riêng biệt . 3. Phân lập vân tay: Ngăn chặn việc nhận dạng là cùng một thiết bị. Việc chỉ tách biệt bộ nhớ và cookie là chưa đủ. Nếu dấu vân tay trình duyệt ( Canvas , WebGL , Âm thanh , phông chữ, độ phân giải màn hình, múi giờ, ngôn ngữ, v.v.) giống nhau, các trang web vẫn có thể liên kết nhiều hồ sơ " độc lập " với cùng một thiết bị. 3.1 Hạn chế của hệ thống Puppeteer/Selenium thông thường gốc của Chrome chỉ có thể sửa đổi một số lượng hạn chế các chiều dấu vân tay (chẳng hạn như --lang , --window-size và User-Agent ), và không thể bao gồm các dấu vân tay cấp phần cứng như Canvas, WebGL và AudioContext . Ngay cả khi sử dụng BrowserContext , các dấu vân tay này cũng được chia sẻ trong cùng một phiên bản trình duyệt. 3.2 Giải pháp tách dấu vân tay chuyên nghiệp Đối với các trường hợp sử dụng nhiều tài khoản yêu cầu độ ẩn danh cao, nên sử dụng trình duyệt chuyên dụng cho dấu vân tay hoặc giải pháp chống phát hiện. Các công cụ này thực hiện việc cách ly dấu vân tay bằng cách sửa đổi công cụ trình duyệt hoặc chèn nhiễu. kế hoạch Kích thước cô lập Phương pháp tích hợp khử crom Canvas, WebGL, Âm thanh, Phông chữ, Múi giờ, Mạng Cung cấp một điểm cuối WebSocket, có thể được kết nối bởi Playwright, Puppeteer và Selenium. Trình duyệt GeekEZ Lõi CPU, bộ nhớ thiết bị, Canvas, WebGL, Âm thanh, TLS, múi giờ Electron + Puppeteer, tích hợp lõi tia X DICloak Môi trường vân tay hoàn chỉnh Ảnh Docker, kết nối với Puppeteer/Playwright thông qua giao thức CDP. BotBrowser Gói dấu vân tay theo ngữ cảnh Hỗ trợ gán dấu vân tay độc lập cho mỗi BrowserContext trong cùng một phiên bản trình duyệt.
Các giải pháp này thường hoạt động bằng cách đầu tiên khởi động môi trường trình duyệt nhận dạng vân tay, lấy cổng gỡ lỗi CDP, và sau đó cho phép Selenium/Puppeteer kết nối thông qua CDP , thay vì trực tiếp khởi chạy trình duyệt bằng Selenium . IV. Cách ly mạng: Địa chỉ IP phải trùng khớp với danh tính. Mỗi môi trường độc lập phải sử dụng một địa chỉ IP riêng biệt; nếu không, ngay cả khi dấu vân tay khác nhau, trang web vẫn có thể liên kết nhiều tài khoản thông qua địa chỉ IP đó . 4.1 Cấu hình Proxy Selenium Python options.add_argument('--proxy-server=http://user:pass@proxy_host:port')
Mỗi phiên bản nên sử dụng một máy chủ proxy khác nhau, và nên thiết lập các tham số proxy một lần khi khởi tạo user-data-dir — các sửa đổi sau đó có thể yêu cầu tạo lại tệp cấu hình. 4.2 Mối liên hệ giữa tác nhân và dấu vân tay Múi giờ phải trùng khớp với vị trí địa lý của địa chỉ IP proxy ; nếu không, sẽ xảy ra tín hiệu mâu thuẫn , chẳng hạn như "địa chỉ IP ở Hoa Kỳ nhưng múi giờ là châu Á " . WebRTC phải được vô hiệu hóa hoặc cấu hình để không tiết lộ địa chỉ IP thực . Nên sử dụng --disable-features=WebRTC hoặc tính năng bảo vệ WebRTC của trình duyệt nhận dạng vân tay . Các thông số như ngôn ngữ và vị trí địa lý cũng cần phải phù hợp với khu vực của người đại diện. V. Phân lập quy trình và tài nguyên: Giải pháp container hóa Container Docker là giải pháp lý tưởng để cách ly các môi trường khác nhau khi bạn cần chạy một số lượng lớn môi trường biệt lập trên cùng một máy . Mỗi container có hệ thống tệp, không gian tên mạng và không gian tiến trình riêng, giúp loại bỏ xung đột tệp cấu hình một cách tự nhiên. 5.1 Giải pháp dựa trên Docker Ảnh DICloak Runtime : Một ảnh Docker được cấu hình sẵn với trình duyệt nhận dạng vân tay , được truy cập bởi các script bên ngoài thông qua cổng CDP . Một container duy nhất hỗ trợ tối đa 100 phiên bản trình duyệt, mỗi phiên bản có vân tay và cổng riêng. Steel Browser : Một môi trường trình duyệt ảo dựa trên điện toán đám mây mã nguồn mở , sử dụng Docker , hỗ trợ Puppeteer/Playwright/Selenium , cung cấp các tệp cấu hình trình duyệt riêng biệt và khả năng duy trì phiên làm việc. Selenoid / Moon : Một triển khai Selenium được đóng gói trong container, hỗ trợ tạo môi trường trình duyệt độc lập cho từng nhóm hoặc nhiệm vụ thông qua các namespace của Kubernetes . 5.2 Quản lý tài nguyên trong các kịch bản không sử dụng container Nếu không sử dụng thùng chứa, bạn phải đảm bảo rằng: thư mục dữ liệu người dùng riêng (như đã đề cập). Sử dụng cơ chế cách ly ở cấp độ tiến trình (chẳng hạn như tùy chọn runChildProcess của Puppeteer ) để ngăn chặn một điểm lỗi duy nhất ảnh hưởng đến tất cả các phiên bản. Hãy cấu hình đúng các tham số như --no-sandbox và --disable-dev-shm-usage để tránh lỗi khởi động trong các môi trường bị hạn chế. VI. Danh sách kiểm tra cho một môi trường thực sự độc lập Hãy kiểm tra từng mục trong bảng bên dưới để đảm bảo đáp ứng các yêu cầu cách ly ở mỗi cấp độ: Mức độ cách ly Phải đáp ứng các điều kiện kho Mỗi phiên bản có thư mục dữ liệu người dùng riêng biệt và thư mục cha không được chia sẻ. Cookie/Lưu trữ Việc cách ly có thể đạt được thông qua các Profile hoặc BrowserContext độc lập. dấu vân tay Tất cả các khía cạnh đều được phân biệt, bao gồm Canvas, WebGL, Âm thanh, phông chữ, múi giờ, ngôn ngữ và kích thước màn hình (yêu cầu các công cụ chuyên dụng). mạng Địa chỉ IP chuyên dụng + đồng bộ múi giờ/vị trí địa lý/ngôn ngữ + ngăn chặn rò rỉ WebRTC quá trình Các phiên bản trình duyệt độc lập (không dùng chung một tiến trình), hoặc được cách ly bằng cách sử dụng container/sandbox. vòng đời Xác định rõ ràng ai chịu trách nhiệm khởi động, sử dụng và dọn dẹp từng môi trường để tránh nhiều tập lệnh cùng hoạt động trên cùng một cấu hình.
Cách làm đơn giản và đáng tin cậy nhất: Đối với việc kiểm thử thông thường, việc tạo một thư mục dữ liệu người dùng độc lập bằng lệnh mkdtemp và một máy chủ proxy độc lập có thể đáp ứng hầu hết các nhu cầu; đối với các trường hợp cần chống lại việc sao chép dữ liệu/nhiều tài khoản, nên sử dụng trình duyệt chống phát hiện (Dechromium, BitBrowser , DICloak, v.v.) để kết nối qua CDP, cho phép các công cụ chuyên nghiệp xử lý việc phân lập dấu vân tay, trong khi Selenium/Puppeteer chỉ xử lý logic nghiệp vụ.
Tổ chức
Chưa có tổ chức nào.