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

Chức năng là những lựa chọn mà bạn có thể sử dụng để tuỳ chỉnh và định cấu hình một phiên ChromeDriver. Trang này trình bày 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 đó.

Các API ngôn ngữ WebDriver cung cấp nhiều cách để truyền các chức năng đến ChromeDriver. Cơ chế chính xác còn 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. Dùng lớp ChromeOptions. Tính năng này được Java, Python, v.v. hỗ trợ.
  2. Dùng lớp DesiredCapabilities. Tính năng này được Python, Ruby, v.v. hỗ trợ. Mặc dù ngôn ngữ này cũng có trong Java, nhưng cách sử dụng trong Java thì không đượ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, trong đó có các phương thức thuận tiện để thiết lập các tính năng dành riêng cho ChromeDriver. Sau đó, bạn có thể truyền 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ừ phiên bản Selenium 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 khác của WebDriver 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 chức năng và loại giá trị cần sử dụng. Xem danh sách đầy đủ tại đây.

Python

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

Hồng ngọc

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 (còn gọi là thư mục dữ liệu người dùng)

Theo mặc định, ChromeDriver sẽ tạo một hồ sơ mới tạm thời cho mỗi phiên truy cập. Đôi khi, bạn có thể muốn đặt tuỳ chọn đặc biệt hoặc chỉ sử dụng hoàn toàn một hồ sơ tuỳ chỉnh. Nếu là tài khoản cũ, bạn có thể sử dụng 'chrome.prefs' (được mô tả ở phần sau bên dưới) để chỉ định các lựa chọn ưu tiên sẽ được áp dụng sau khi Chrome khởi động. Nếu có, bạn có thể sử dụng nút chuyển dòng lệnh user-data-dir của Chrome để cho Chrome biết nên sử dụng hồ sơ nào:

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

Bạn có thể tạo hồ sơ tuỳ chỉnh của riêng mình bằng cách chạy Chrome (trên dòng lệnh hoặc thông qua ChromeDriver) với nút chuyển user-data-dir được đặt thành một 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í đã chỉ định. Sau đó, bạn có thể sửa đổi chế độ cài đặt hồ sơ nếu muốn và ChromeDriver có thể sử dụng hồ sơ đó 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ế độ phóng to

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

Sử dụng tệp thực thi Chrome ở một 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 (tức là khôi phục hoạt động bình thường của Chrome khi ChromeDriver không kiểm soát cửa sổ bật lên), 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ể dùng mã sau đây để định cấu hình Chrome nhằm 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 tải xuống một số thư mục nhất định. Đặc biệt, bạn không thể sử dụng thư mục Desktop làm thư mục tải xuống. Trên Linux, bạn cũng không thể sử dụng thư mục gốc để tải xuống. Vì danh sách chính xác các thư mục bị cấm có thể thay đổi, bạn nên sử dụng một thư mục không có ý nghĩa đặc biệt đối với hệ thống.
  • ChromeDriver không tự động đợi quá trình tải xuống hoàn tất. Nếu bạn gọi drive.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.
  • Đường dẫn tương đối không phải lúc nào cũng hoạt động. Để có kết quả tốt nhất, hãy sử dụng đường dẫn đầy đủ.
  • Trên Windows, hãy sử dụng "" làm dấu phân cách đường dẫn. Sử dụng "/" không đáng tin cậy trên Windows.
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 đã ghi nhận được

Vui lòng xem tài liệu về Sereniumtiêu chuẩn W3C WebDriver để xem tiêu chuẩn mà ChromeDriver chấp nhận. Ở đây, chúng tôi chỉ liệt kê dành riêng cho Chrome các chức năng khác nhau.

ChromeOptions đối tượng

Hầu hết các tính năng dành riêng cho Chrome đều được cung cấp thông qua ChromeOptions . Ở một số ngôn ngữ, việc này được lớp ChromeOptions triển khai. Trong các ngôn ngữ khác, chúng được lưu trữ trong từ điển goog:chromeOptions trong khả năng mong muốn.

Tên Loại Mặc định  Mô tả 
args  danh sách chuỗi   Danh sách các đối số dòng lệnh dùng khi khởi động Chrome. Đối số có giá trị liên quan phải được phân tách bằng dấu '=' (ví dụ: ['start-personalizedd', 'user-data-dir=/tmp/temp_profile']). Xem tại đây để biết danh sách các đối số Chrome.
binary chuỗi   Đường dẫn đến tệp thực thi Chrome để sử dụng (trên Mac OS X, đây phải là tệp nhị phân thực tế, chứ không phải chỉ ứ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 của Chrome để cài đặt khi khởi động. Mỗi mục trong danh sách phải là một tiện ích Chrome đóng gói được mã hoá base-64 (.crx)
localState từ điển   Một từ điển với mỗi mục nhập bao gồm tên của lựa chọn ưu tiên và giá trị của lựa chọn đó. Các lựa 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 với mỗi mục nhập bao gồm tên của lựa chọn ưu tiên và giá trị của lựa 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. Xem mục "Lựa chọn ưu tiên" trong thư mục dữ liệu người dùng của Chrome để làm ví dụ.
detach boolean sai Nếu đặt là false, Chrome sẽ bị thoát khi ChromeDriver bị dừng, bất kể phiên có bị thoát hay không. Nếu bạn đặt chính sách này thành true, thì Chrome sẽ chỉ thoát nếu phiên bị thoát (hoặc bị đóng). Lưu ý: nếu đúng và phiên không thoát, ChromeDriver không thể xoá 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 chuỗi
Địa chỉ của máy chủ trình gỡ lỗi Chrome để kết nối, ở dạng <hostname/ip:port>, ví dụ: "127.0.0.1:38947"
excludeSwitches danh sách chuỗi   Danh sách dòng lệnh của Chrome chuyển sang loại trừ ChromeDriver đó theo mặc định được chuyển khi khởi động Chrome. Không được chuyển tiền tố bằng --.
minidumpPath  chuỗi   Thư mục lưu trữ bản sao thu nhỏ của Chrome . (Chỉ được hỗ trợ trên Linux.)
mobileEmulation từ điển   Từ điển có giá trị cho “deviceName” hoặc giá trị cho “deviceMetrics” và “userAgent”. Hãy tham khảo phần Mô phỏng thiết bị di động để biết thêm thông tin.
perfLoggingPrefs từ điển   Từ điển không bắt buộc chỉ định các lựa chọn ưu tiên về 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ổ sẽ xuất hiện trong danh sách ô điều khiển cửa sổ. Để truy cập vào <webview> các phần tử, bao gồm "chế độ xem web" trong danh sách này.

perfLoggingPrefs đối tượng

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

Tên Loại Mặc định Mô tả
enableNetwork boolean đúng Liệu có thu thập sự kiện từ Miền mạng hay không.
enablePage boolean đúng Liệu có thu thập sự kiện từ Miền trang hay không.
traceCategories string (trống) Một chuỗi danh mục theo dõi của Chrome được phân tách bằng dấu phẩy mà cần thu thập sự kiện theo dõi. Chuỗi không xác định hoặc trống 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ông cụ cho nhà phát triển. Ví dụ: nếu 1000, thì một lần mỗi giây, Công cụ cho nhà phát triển sẽ báo cáo mức độ đầy đủ của bộ đệm theo dõi. Nếu báo cáo cho biết mức sử dụng vùng đệm là 100%, thì hệ thống sẽ đưa ra cảnh báo.

Khả năng được trả về

Đây là danh sách tất cả tính năng được trả về dành riêng cho Chrome. (ví dụ: dữ liệu 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 ý, nút này nằm bên trong 'chrome' từ điển