Tương tác với trang web bằng Console của trình duyệt qua một ví dụ đơn giản

Tương tác với trang web bằng Console của trình duyệt qua một ví dụ đơn giản

Những mẩu tin ngắn hàng ngày dành cho bạn
  • smee.io là một cách đơn giản để tạo một địa chỉ webhook và ánh xạ nó về địa chỉ localhost trong máy tính của bạn.

    $ npm install --global smee-client $ smee -u https://smee.io/eu4UoW8vrKSZtTB

    » Xem thêm
  • javascript.tm được Ryan Dahl - cha đẻ của Node.js tạo ra với mục tiêu trình bày và kêu gọi cộng đồng ủng hộ việc Oracle "giải phóng" cái tên JavaScript, trả lại nó cho cộng đồng.

    Anh cho rằng Oracle sau nhiều thương vụ mua bán đã gián tiếp sở hữu cái tên JavaScript, nhưng họ lại không sử dụng cái tên này. Một điều nữa là JavaScript đã trở thành tên gọi chung, cộng đồng sử dụng rất nhiều mà ít ai biết rằng nó thuộc về Oracle.

    Việc Oracle nắm giữ thương hiệu này gây ra sự nhầm lẫn không cần thiết. Anh kêu gọi Oracle từ bỏ quyền sở hữu, trả nó về với cộng đồng. Nếu được như vậy, nhiều hiểu lầm được xoá bỏ và mọi người sẽ có nhiều quyền hạn với cái tên này. Ví dụ, chúng ta sẽ có một "Hội nghị về JavaScript" trong tương lai mà không phải lo lắng về vấn đề pháp lý.

    Thông tin mới nhất, Vào ngày 22 tháng 11 năm 2024: Anh đã nộp đơn lên USPTO. Chúng ta cùng chờ xem kết quả ra sao nhé! Ngoài ra bạn cũng có thể bày tỏ sự ủng hộ bằng cách truy cập vào địa chỉ ở trên và tiến hành "ký" vào lá đơn 😇

    » Xem thêm
  • Nhớ mấy ngày đầu đi phỏng vấn, có một câu hỏi là JavaScript có phải là Java không? Thì mình trả lời ngay là có 😆. Buồn cười thật, vì đúng ra JavaScript và Java là hai ngôn ngữ khác nhau hoàn toàn.

    Sự nhầm lẫn này mà mới đây đã dẫn đến vụ kiện đòi Oracle trả lại cái tên JavaScript cho cộng đồng. Oracle? Đúng vậy, cái tên liên quan rất mật thiết đến Java, nhưng tại sao lại kiện họ với JavaScript cơ chứ?

    Hic, hôm nay làm việc mệt mỏi quá nên xin phép ngày mai mình kể chi tiết hơn nha vì câu chuyện khá dài đấy 😅

    » Xem thêm

Vấn đề

Có thể bạn đã biết, trước đây khi chưa có React, Vue... thì jQuery đã làm bá chủ của nhiều trang web. Hầu như trang nào cũng sử dụng jQuery vì đó là thư viện cung cấp nhiều hàm tương tác với DOM để thay đổi dữ liệu rất mạnh mẽ. Nhưng vì quá nặng và cồng kềnh, cộng với sự ra đời của nhiều công cụ xây dựng web hiện đại sau này, mà giờ đây nó đã trên "bờ vực của cái chết".

Khi truy cập vào một trang web, mỗi hành động của bạn thể hiện cho việc tương tác với DOM. Ngoài ra, còn một vài thứ có thể tương tác với DOM nữa như là JavaScript. Điều đó nghĩa là, có thể sử dụng JavaScript để tạo ra tương tác với DOM như một người dùng bình thường. Từ đó, chúng ta có thể tự động hóa một chuỗi các hành động lặp đi lặp lại mà không cần sự tương tác của người dùng nữa.

Hầu hết trình duyệt hiện đại bây giờ đều cung cấp chức năng gọi là Console để cho chúng ta viết và chạy mã JavaScript ngay tại trang web đang truy cập. Bài viết ngày hôm nay, tôi sẽ nêu ra một ví dụ cụ thể về cách viết mã JavaScript thực hiện một hành động lặp đi lặp lại trên trang web. Hy vọng qua bài viết này, bạn đọc có thể hình dung ra nhiều ứng dụng hơn nữa và áp dụng nó trong công việc hàng ngày.

DOM và JavaScript

Document Object Model (DOM) là một giao diện lập trình cho các trang web. Nó đại diện cho trang web để các chương trình có thể thay đổi cấu trúc, kiểu và nội dung tài liệu. DOM đại diện cho trang web (document) dưới dạng các nút và đối tượng. Qua đó, làm cho một số ngôn ngữ lập trình có thể tương tác với trang.

JavaScript có thể tương tác với DOM một cách mạnh mẽ. Hình dung DOM như một Web API mà trình duyệt cung cấp cho nó toàn quyền truy cập và chỉnh sửa. Hầu như trải nghiệm tuyệt vời trên web ngày nay đều có sự góp mặt của JavaScript. Cùng với sự phát triển của thế giới web, chúng ta ngày càng có nhiều trang web động, chú trọng đến trải nghiệm của người dùng hơn. Nhiều Framework, Library dựa trên JavaScript để tăng tương tác với DOM góp phần tạo ra trang web mang nhiều tiện ích như thế.

Trình duyệt cho phép chúng ta chạy mã JavaScript trực tiếp trên trang web thông qua Dev Tools của nó. Trong Chrome, sau khi bật Dev Tools và vào cửa sổ Console, bạn đã có thể viết mã JS vào đây và chạy nó.

Console của trình duyệt

Lợi dụng điều này mà trước đây, nhiều hacker cố gắng lừa người dùng dán một đoạn mã để họ ăn cắp dữ liệu. Nhưng trong bài viết này, tôi không đi sâu vào chủ đề đó, mà mục đích là giúp cho các bạn hình dung được cách sử dụng JavaScript để tương tác với DOM.

Nói thì có vẻ dài dòng, hãy lấy một ví dụ đơn giản là "thả react liên tục vào tin nhắn trên Telegram" để giúp bạn đọc dễ hình dung hơn.

Thả react liên tục vào tin nhắn Telegram

Hầu như bây giờ, các dịch vụ nhắn tin OTT có cung cấp phiên bản web cho chúng ta sử dụng. Một điều tôi thấy thích thú là tính năng react tin nhắn bằng các emoji để thể hiện cảm xúc. Thích vì nhiều khi mình không cần phải trả lời mà chỉ cần thả một emoji, hoặc đôi khi react để cho người gửi biết là mình đã đọc tin nhắn của họ, và cảm xúc khi đọc được tin nhắn đó là như thế nào.

Tôi có một thói quen hay react tin nhắn. Một phần vì muốn cho họ biết là mình đã đọc, một phần thì là do "nghịch ngợm". Trên Telegram thì có một nhóm bạn chuyên nói nhiều chuyện trên trời dưới đất, và để cho bớt nhàm chán mỗi khi không "rảnh tay", thì tôi đã viết một script cho nó tự thả emoji vào tin nhắn của bọn họ.

Để viết được script, trước tiên chúng ta cần bỏ ra một ít thời gian nghiên cứu cách hoạt động của tính năng react.

Đầu tiên, tôi thấy mỗi khi di chuột vào khung thời gian thì emoji sẽ hiện ra, bấm vào emoji thì là thả react thành công. Các tin nhắn khác cũng tương tự. Để ý là phần DOM của emoji vẫn luôn có ở đó, chỉ là CSS đã ẩn nó đi và chỉ hiện khi chúng ta di chuột vào.

Cách react emoji hoạt động

Vì vậy ý tưởng là lấy tất cả tin nhắn, lặp qua từng cái và bấm vào emoji là đã thả react thành công.

Đầu tiên là hàm lấy tất cả tin nhắn:

const getListMessage = () => {
  return (
    document.querySelectorAll(
      "div.message-content-wrapper.can-select-text > div"
    ) || []
  );
};

div.message-content-wrapper.can-select-text > div là selector của mỗi tin nhắn.

Hàm kiểm tra tin nhắn đã được react chưa bằng cách kiểm tra có element .Reactions chưa.

const checkReactMessage = (elm) => {
  if (elm) {
    return !!elm.querySelector(".Reactions");
  }
  return false;
};

Hàm react tin bằng cách click:

const react = (elm) => {
  if (elm) {
    elm.click();
  }
};

Cuối cùng là hàm xử lý chính:

const main = () => {
  const listMessage = getListMessage();
  listMessage.forEach((elm) => {
    if (!checkReactMessage(elm)) {
      react(elm.querySelector('div.quick-reaction'));
    }
  });
};

Sau đó bạn có thể gọi hàm main và xem kết quả. Hoặc nếu muốn nó react vào những tin nhắn mới sau đó thì thêm hàm setInterval.

setInterval(main, 3000);

Kết quả là:

Kết quả

Tổng kết

DOM là một giao diện lập trình cho các tài liệu web. JavaScript có thể tương tác với DOM một cách dễ dàng. Đặc biệt, việc có thể chạy JavaScript trực tiếp từ Console trong trình duyệt giúp bạn thoải mái tạo ra các hành động thay mặt người dùng một cách tự động hóa.

Cao cấp
Hello

Tôi & khao khát "chơi chữ"

Bạn đã thử viết? Và rồi thất bại hoặc chưa ưng ý? Tại 2coffee.dev chúng tôi đã có quãng thời gian chật vật với công việc viết. Đừng nản chí, vì giờ đây chúng tôi đã có cách giúp bạn. Hãy bấm vào để trở thành hội viên ngay!

Bạn đã thử viết? Và rồi thất bại hoặc chưa ưng ý? Tại 2coffee.dev chúng tôi đã có quãng thời gian chật vật với công việc viết. Đừng nản chí, vì giờ đây chúng tôi đã có cách giúp bạn. Hãy bấm vào để trở thành hội viên ngay!

Xem tất cả

Đăng ký nhận thông báo bài viết mới

hoặc
* Bản tin tổng hợp được gửi mỗi 1-2 tuần, huỷ bất cứ lúc nào.
Author

Xin chào, tôi tên là Hoài - một anh Dev kể chuyện bằng cách viết ✍️ và làm sản phẩm 🚀. Với nhiều năm kinh nghiệm lập trình, tôi đã đóng góp một phần công sức cho nhiều sản phẩm mang lại giá trị cho người dùng tại nơi đang làm việc, cũng như cho chính bản thân. Sở thích của tôi là đọc, viết, nghiên cứu... Tôi tạo ra trang Blog này với sứ mệnh mang đến những bài viết chất lượng cho độc giả của 2coffee.dev.Hãy theo dõi tôi qua các kênh LinkedIn, Facebook, Instagram, Telegram.

Bạn thấy bài viết này có ích?
Không

Bình luận (1)

Nội dung bình luận...
Avatar
Anh Đức Trừ10 tháng trước
bài viết của mình về Google Chrome Developer Tools bạn đọc thử nhé. https://www.blogchemgio.com/2022/06/google-chrome-developer-tools.html
Trả lời
Avatar
Xuân Hoài Tống10 tháng trước
Cảm ơn bạn, một bài viết khá chi tiết về developer tools 😄