Electrical Engineer turned Data Scientist. Married to Awesome. Occasional drawer of Minions.

Những "hiệp sĩ không đầu" trong lập trình

Thỉnh thoảng lướt bản tin JavaScript Weekly, tôi lại thấy có những thuật ngữ khá lạ như headless browswer, rồi headless mode cho Chrome, Firefox, v.v. Cái gì mà "trình duyệt không đầu"? Nhìn là liên tưởng đến nhân vật Nick không đầu trong Harry Potter. Do thấy nó vừa lạ vừa không liên quan, tôi cố tránh đụng vào nó khi chưa cần thiết. Nhưng đến giờ khi đụng vào viết test cho thư viện JavaScript đang làm, nhìn cấu hình cho Karma thì cái từ khóa hài hước kia lại xuất hiện. Vậy đành làm một vài phép google nhanh để hiểu thế nào là "không đầu", nó dùng vào việc gì? Những gì phức tạp hơn sẽ dành cho 1 bài viết khác.

alt text{: .center-image }

Headless browswer là gì?


Một "Headless [hed-lis] browser" là khi trình duyệt hoạt động không có giao diện người dùng (GUI - graphical user interface). Headless browsers cung cấp công cụ để lập trình viên có thể thao tác với trang web thông qua dòng lệnh hoặc điều khiển từ xa qua mạng.

Tham khảo tại đây.

Dùng Headless browswer vào việc gì?


  • Tự động hóa việc test cho các ứng dụng web
  • Chụp màn hình của trang web
  • Chạy các test tự động cho các thư viện JavaScript
  • Duyệt web để thu thập dữ liệu
  • Tự động hóa quá trình tương tác với web
  • Chạy trình duyệt trên server

Có thể dùng headless browswer cho mục đích xấu nào?


  • Tiến hành tấn công website bằng phương thức DDOS
  • Làm tăng lượng truy cập ảo để nâng điểm quảng cáo
  • Chạy web cho các mục đích đáng ngờ, ví dụ "credential stuffing"

Ghi chú: Credential stuffing là một dạng tấn công mạng để ăn cắp quyền truy cập website của một thành viên của website đấy. Việc tấn công thực hiện qua việc gửi một lượng lớn các yêu cầu truy cập đến trang web.

Có phải tất cả các trình duyệt chạy ở bất kỳ hệ điều nào cũng có chế độ headless?


Không! Internet Explorer và Microsoft Edge không hỗ trợ. Và chế độ này còn tùy thuộc vào hệ điều hành của người dùng. Dưới đây là danh sách các trình duyệt cung cấp chế độ headless (hỗ trợ một phần hoặc 100%):

  1. Google Chrome -> từ version 59 cho Linux và macOS.
  2. Firefox --> từ version 56 cho cả Linux, Windows và macOS.
  3. PhantomJS - một headless browswer sử dụng engine WebKit cho việc rendering trang web cũng như JavaScriptCore để chạy các kịch bản test.
  4. HtmlUnit -> một headless browser viết bằng Java, sử dụng engine Rhino.
  5. TrifleJS -> một headless Internet Explorer scriptable browser sử dụng engine Trident.
  6. Spalsh

Ngoài "headless browswer" ra, còn cái gì "headless" khác nữa không?


YES!!!. Có "headless software" được định nghĩa là những phần mềm có khả năng chạy trên thiết bị không cần giao diện đồ họa người dụng. Những phần mềm này nhận thông số đầu vào và xuất tín hiệu đầu ra thông qua các giao diện như network, cổng serial, thường được cài trên servers hoặc các thiết bị nhúng.

Ngoài ra còn có "headless computer" là những thiết bị không dùng màn hình, thậm chí không cả chuột và bàn phím.

Tham khảo tại đâyđây.

Một vài lệnh cơ bản với Headless Chrome


Tham khảo tại đây.

  1. Khởi động Headless Chrome từ cửa sổ lệnh:
  2. Printing DOM
  3. Tạo file PDF từ trang web
  4. Chụp màn hình
  5. Chạy chế độ REPL (read-eval-print-loop)

Kết luận & bài viết để tham khảo sau này:


  1. Automated testing with Headless Chrome
  2. Introduction to Headless Browser Testing
  3. Using headless Chrome as an automated screenshot tool