Các chức năng và tuỳ chọn Chrome

Chức năng là các tuỳ chọn mà bạn có thể sử dụng để tuỳ chỉnh và định cấu hình phiên ChromeDriver. Trang này ghi lại tất cả các chức năng được ChromeDriver hỗ trợ và cách sử dụng các chức năng đó.

API ngôn ngữ WebDriver cung cấp các cách để truyền chức năng đến ChromeDriver. Cơ chế chính xác sẽ khác nhau tuỳ theo ngôn ngữ, nhưng hầu hết các ngôn ngữ đều sử dụng một hoặc cả hai cơ chế sau:

  1. Sử dụng lớp ChromeOptions. Java, Python, v.v. hỗ trợ tính năng này.
  2. Sử dụng lớp DesiredCapabilities. Python, Ruby, v.v. hỗ trợ tính năng này. Mặc dù cũng có trong Java, nhưng việc sử dụng tính năng này trong Java không còn được dùng nữa.

Sử dụng lớp ChromeOptions

Bạn có thể tạo một thực thể của ChromeOptions. Thực thể này có các phương thức thuận tiện để thiết lập các chức năng dành riêng cho ChromeDriver. Sau đó, bạn có thể truyền đối tượng ChromeOptions vào hàm khởi tạo ChromeDriver:

ChromeOptions options = new ChromeOptions();
options.addExtensions(new File("/path/to/extension.crx"));
ChromeDriver driver = new ChromeDriver(options);

Kể từ Selenium phiên bản 3.6.0, lớp ChromeOptions trong Java cũng triển khai giao diện Capabilities, cho phép bạn chỉ định các chức năng WebDriver khác không dành riêng cho ChromeDriver.

ChromeOptions options = new ChromeOptions();

// Add the WebDriver proxy capability.
Proxy proxy = new Proxy();
proxy.setHttpProxy("myhttpproxy:3337");
options.setCapability("proxy", proxy);

// Add a ChromeDriver-specific capability.
options.addExtensions(new File("/path/to/extension.crx"));
ChromeDriver driver = new ChromeDriver(options);

Sử dụng DesiredCapabilities

Để sử dụng DesiredCapabilities, bạn cần biết tên của chức năng và loại giá trị mà chức năng đó nhận. Xem danh sách đầy đủ.

Python

caps = webdriver.DesiredCapabilities.CHROME.copy()
caps['acceptInsecureCerts'] = True
driver = webdriver.Chrome(desired_capabilities=caps)

Ruby

caps = Selenium::WebDriver::Remote::Capabilities.chrome(
  "goog:chromeOptions" => {"args" => [ "window-size=1000,800" ]})
driver = Selenium::WebDriver.for :chrome, desired_capabilities: caps

Các trường hợp sử dụng phổ biến

Sử dụng hồ sơ tuỳ chỉnh

Theo mặc định, ChromeDriver sẽ tạo một hồ sơ tạm thời mới cho mỗi phiên. Bạn có thể đặt các tuỳ chọn ưu tiên đặc biệt hoặc chỉ sử dụng một hồ sơ tuỳ chỉnh, còn gọi là thư mục dữ liệu người dùng.

Nếu sử dụng hồ sơ tạm thời, bạn có thể sử dụng chức năng chrome.prefs để chỉ định các tuỳ chọn ưu tiên sẽ áp dụng sau khi Chrome khởi động. Đối với hồ sơ tuỳ chỉnh, bạn có thể sử dụng nút chuyển dòng lệnh Chrome user-data-dir để cho Chrome biết hồ sơ nào sẽ sử dụng:

ChromeOptions options = new ChromeOptions();
options.addArguments("user-data-dir=/path/to/your/custom/profile");

Tạo hồ sơ tuỳ chỉnh của riêng bạn bằng cách chạy Chrome trên dòng lệnh hoặc ChromeDriver, sử dụng nút chuyển user-data-dir được đặt thành một số thư mục mới.

Nếu đường dẫn không tồn tại, Chrome sẽ tạo một hồ sơ mới ở vị trí được chỉ định. Sau đó, bạn có thể sửa đổi chế độ cài đặt hồ sơ và ChromeDriver có thể sử dụng hồ sơ này trong tương lai. Mở chrome://version trong trình duyệt để xem Chrome đang sử dụng hồ sơ nào.

Khởi động Chrome ở chế độ mở rộng tối đa

Khởi động Chrome ở chế độ mở rộng bằng cách sử dụng nút chuyển start-maximized:

ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized");

Sử dụng tệp thực thi Chrome ở vị trí không chuẩn

ChromeOptions options = new ChromeOptions();
options.setBinary("/path/to/other/chrome/binary");

Chặn cửa sổ hộp thoại

Theo mặc định, ChromeDriver định cấu hình Chrome để cho phép cửa sổ bật lên. Nếu bạn muốn chặn cửa sổ bật lên và khôi phục hành vi bình thường của Chrome khi Chrome không được ChromeDriver kiểm soát, hãy làm như sau:

ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("excludeSwitches",
     Arrays.asList("disable-popup-blocking"));

Đặt thư mục tải xuống

Bạn có thể sử dụng mã sau để định cấu hình Chrome tải tệp xuống một thư mục cụ thể. Tuy nhiên, bạn cần lưu ý một số điều sau:

  • Chrome không cho phép sử dụng một số thư mục nhất định để tải xuống. Cụ thể, bạn không thể sử dụng thư mục trên máy tính làm thư mục tải xuống. Trên Linux, bạn không thể sử dụng thư mục gốc để tải xuống. Danh sách chính xác các thư mục bị cấm có thể thay đổi, vì vậy, bạn nên sử dụng một thư mục duy nhất không có ý nghĩa đặc biệt đối với hệ thống.
  • ChromeDriver không tự động chờ quá trình tải xuống hoàn tất. Nếu bạn gọi driver.quit() quá sớm, Chrome có thể chấm dứt trước khi quá trình tải xuống hoàn tất.
  • Để có kết quả tốt nhất, hãy sử dụng đường dẫn đầy đủ vì đường dẫn tương đối không phải lúc nào cũng hoạt động.
  • Trên Windows, việc sử dụng \` as path separators./` không đáng tin cậy.
ChromeOptions options = new ChromeOptions();
Map<String, Object> prefs = new HashMap<String, Object>();
prefs.put("download.default_directory", "/directory/path");
options.setExperimentalOption("prefs", prefs);

Các chức năng được nhận dạng

Đọc tài liệu về Seleniumtiêu chuẩn WebDriver của W3C để biết các chức năng tiêu chuẩn mà ChromeDriver chấp nhận. Tại đây, chúng tôi liệt kê các tính năng dành riêng cho Chrome.

Đối tượng ChromeOptions

Hầu hết các chức năng dành riêng cho Chrome đều được hiển thị thông qua đối tượng ChromeOptions. Trong một số ngôn ngữ, các lớp này được triển khai bằng lớp ChromeOptions. Trong các ngôn ngữ khác, các từ khoá này được lưu trữ trong từ điển goog:chromeOptions trong các chức năng đã chọn.

Tên Loại Mặc định Mô tả
args danh sách chuỗi    Danh sách đối số dòng lệnh để sử dụng khi khởi động Chrome. Các đối số có giá trị liên kết phải được phân tách bằng dấu "=" (chẳng hạn như ["start-maximized", "user-data-dir=/tmp/temp_profile"]). Xem danh sách đối số Chrome.
binary chuỗi   Đường dẫn tới tệp thực thi Chrome để sử dụng.
Trên macOS X, đây phải là tệp nhị phân thực tế, chứ không chỉ là ứng dụng, chẳng hạn như /Applications/Google Chrome.app/Contents/MacOS/Google Chrome.
extensions danh sách chuỗi   Danh sách các tiện ích Chrome cần cài đặt khi khởi động. Mỗi mục trong danh sách phải là một tiện ích Chrome được đóng gói và mã hoá bằng cơ sở 64 (.crx)
localState từ điển   Một từ điển có mỗi mục nhập bao gồm tên của tuỳ chọn và giá trị của tuỳ chọn đó. Các tuỳ chọn ưu tiên này được áp dụng cho tệp Trạng thái cục bộ trong thư mục dữ liệu người dùng.
prefs từ điển   Một từ điển có mỗi mục nhập bao gồm tên của tuỳ chọn và giá trị của tuỳ chọn đó. Các lựa chọn ưu tiên này chỉ áp dụng cho hồ sơ người dùng đang được sử dụng. Hãy xem tệp "Preferences" (Lựa chọn ưu tiên) trong thư mục dữ liệu người dùng của Chrome để biết ví dụ.
detach boolean false Nếu giá trị là false, Chrome sẽ thoát khi ChromeDriver bị tắt, bất kể phiên có thoát hay không.
Nếu đúng, Chrome chỉ thoát nếu phiên bị thoát hoặc đóng. Nếu đúng và phiên không thoát, ChromeDriver không thể dọn dẹp thư mục dữ liệu người dùng tạm thời mà phiên bản Chrome đang chạy đang sử dụng.
debuggerAddress string 
Địa chỉ của máy chủ gỡ lỗi Chrome để kết nối, ở dạng <hostname/ip:port>, chẳng hạn như "127.0.0.1:38947"
excludeSwitches danh sách chuỗi    Danh sách các nút chuyển dòng lệnh Chrome để loại trừ ChromeDriver theo mặc định sẽ chuyển khi khởi động Chrome. Không đặt tiền tố cho các nút chuyển bằng --.
minidumpPath string    Thư mục để lưu trữ tệp báo lỗi nhỏ của Chrome. (Chỉ hỗ trợ trên Linux.)
mobileEmulation từ điển   Một từ điển có giá trị cho "deviceName" hoặc giá trị cho "deviceMetrics" và "userAgent". Tham khảo phần Mô phỏng thiết bị di động để biết thêm thông tin.
perfLoggingPrefs từ điển   Một từ điển không bắt buộc chỉ định các tuỳ chọn ghi nhật ký hiệu suất. Hãy xem mục bên dưới để biết thêm thông tin.
windowTypes danh sách chuỗi   Danh sách các loại cửa sổ xuất hiện trong danh sách tay nắm cửa sổ. Để truy cập vào các phần tử webview, hãy thêm "webview" vào danh sách này.
enableExtensionTargets boolean false Bật tính năng tự xem xét các mục tiêu của Tiện ích Chrome. Theo mặc định, ChromeDriver không bao gồm các mục tiêu tiện ích (từ Chrome 136).

Đối tượng perfLoggingPrefs

Từ điển perfLoggingPrefs có định dạng như sau. Tất cả các khoá đều không bắt buộc:

Tên Loại Mặc định Mô tả
enableNetwork boolean true Liệu có thu thập sự kiện từ miền Mạng hay không.
enablePage boolean true Liệu có thu thập sự kiện từ miền Trang hay không.
traceCategories chuỗi (trống) Chuỗi được phân tách bằng dấu phẩy gồm các danh mục theo dõi của Chrome mà bạn muốn thu thập sự kiện theo dõi. Chuỗi trống hoặc không được chỉ định sẽ tắt tính năng theo dõi.
bufferUsageReportingInterval số nguyên dương 1000 Số mili giây được yêu cầu giữa các sự kiện sử dụng vùng đệm theo dõi của DevTools. Ví dụ: nếu là 1000, thì mỗi giây, DevTools sẽ báo cáo mức độ đầy của vùng đệm theo dõi. Nếu báo cáo cho biết mức sử dụng vùng đệm là 100%, thì một cảnh báo sẽ được đưa ra.

Các tính năng được trả về

Dưới đây là danh sách tất cả các chức năng được trả về dành riêng cho Chrome, nói cách khác, những gì ChromeDriver trả về khi bạn tạo một phiên mới.

Tên Loại Mô tả
chrome.chromedriverVersion chuỗi phiên bản ChromeDriver
userDataDir chuỗi đường dẫn đến thư mục dữ liệu người dùng mà Chrome đang sử dụng; lưu ý rằng đường dẫn này nằm bên trong từ điển "chrome"