Home / BLOG / Dùng puppeteer chế tool theo dõi chỉ số điện qua Facebook Messenger

Dùng puppeteer chế tool theo dõi chỉ số điện qua Facebook Messenger

Sau bài giới thiệu về puppeteer thì hôm nay mình hướng dẫn các bạn dùng puppeteer để theo dõi chỉ số điện thông qua Facebook nhé.
Ở đây mình sẽ chia làm 3 phần cho các bạn tiện theo dõi nhé.
Phần 1: Tạo ra một tool tự động đăng nhập và lấy ra chỉ số điện theo ngày, theo tháng trên trang Chăm Sóc Khách Hàng Dùng Điện của Điện Lực Hà Nội nhé.
Phần 2: Tạo chat bot trên Facebook để trả lời tự động khi mình muốn tra cứu mà không cần phải vào trang của điện lực để xem.
Phần 3: Đẩy ứng dụng lên GitHub và Deploy ứng dụng lên Jenkins hoặc Travis CI.

I. Bắt đầu với việc đăng nhập vào trang http://cskh.evnhanoi.com.vn thì ta cần phải lấy ra Xpath của các phần tử: tên tài khoản, mật khẩu, nút đăng nhập.

async function login() {
const puppeteer = require(‘puppeteer’);
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(‘http://cskh.evnhanoi.com.vn/Account/Login’);
const username = ‘#UserName’;
await page.waitForSelector(username);
await page.type(username, “username”);
const password = ‘#password’;
await page.waitForSelector(password);
await page.type(password, “password”);
const buttonLogin = ‘#btLogin’;
await page.waitForSelector(buttonLogin);
console.log(‘click button login’);
await page.click(buttonLogin);
})();
}

Sau đó là vào trang tra cứu để lấy ra thông tin chỉ số điện, ở đây cần điền vào 2 thông tin là ngày bắt đầu và ngày kết thúc.
Mình sử dụng thư viện moment trong Nodejs để lấy ra được ngày hiện tại và ngày mình muốn tra cứu theo ý muốn của mình.
Ở đây mình lấy ra 3 ngày: ngày hôm nay, hôm qua và ngày đầu tiên của tháng hiện tại

var yesterday = moment().subtract(1, “days”).format(“DD/MM/YYYY”);
var today = moment().format(“DD/MM/YYYY”);
var date_today = moment().format(“DD”);
var day_of_firt_month = moment().subtract((date_today – 1), “days”).format(“DD/MM/YYYY”);

Và đây là function lấy ra chỉ số điện và lưu thông tin vào file text để dùng sau.

async function getData(page, from, to) {
await page.goto(‘http://cskh.evnhanoi.com.vn/BaoCaoChiSo/Index’, {
waitUntil: ‘networkidle0’
});
var date_dtTuNgay = from;
var date_dtDenNgay = to;
const dtTuNgay = ‘#dtTuNgay’;
await page.waitForSelector(dtTuNgay);
await page.click(dtTuNgay);
await page.type(dtTuNgay, date_dtTuNgay);
page.waitForNavigation();
const dtDenNgay = ‘#dtDenNgay’;
await page.waitForSelector(dtDenNgay);
await page.click(dtDenNgay);
await page.type(dtDenNgay, date_dtDenNgay);
page.waitForNavigation();
const btnTongHop = ‘#btnTongHop’;
await page.waitForSelector(btnTongHop);
page.click(btnTongHop);
const lbSG = ‘#lbSG > strong > i’;
await page.waitForSelector(lbSG);
const tblChiSo = ‘#tblChiSo’;
await page.waitForSelector(tblChiSo);
var tblChiSo = await page.evaluate(() => document.querySelector(‘#lbSG’).innerText);
console.log(tblChiSo);
fs.writeFile(“today.txt”, tblChiSo, (err) => {
if (err) {
console.log(err);
}
});
}

Ok vậy là đã hoàn thành xong tool get ra chỉ số điện theo ngày mình mong muốn.
Chạy thử xem nó ra sao nhé
Ảnh chụp màn hình

Console

Đã lấy ra được thông tin cần lấy rồi 😀

II. Dùng thư viện facebook-chat-api để tạo tool tự động gửi tin nhắn qua ứng dụng Messenger FB

Ở đây mình tạo 1 nick FB ảo để sử dụng cho tool này tránh dùng nick thật có nguy cơ bị verify do spam tin nhắn nhiều quá đó.

const login = require(“facebook-chat-api”);
// Create simple echo bot
login({
email: “FB_EMAIL”,
password: “FB_PASSWORD”
}, (err, api) => {
if (err) return console.error(err);
api.listen((err, message) => {
fs.readFile(“today.txt”, function(err, buf) {
api.sendMessage(“Today…” + buf.toString().replace(‘KT – Không thời gian:’, ”), event.threadID);
});
});
});

III. Deploy project lên Travis CI

Các bạn cấu hình file .travis.yml như sau để cài đặt một số thư viện và chạy các file auto.

language: node_js
node_js:
– “10”
dist: trusty
cache:
directories:
– node_modules
install:
– npm install
– npm install facebook-chat-api
– npm install moment
– npm install fs
script:
– node get_data_auto_reply.js
– node auto-reply.js

Ok. bây giờ upload lên github và connect project vào Travis CI

Ta được kết quả như sau:

Giờ thì vào FB và nhắn tin cho tài khoản mà mình kết nối với tool facebook-chat-api xem kết quả ra sao nhé.

Thử với ký tự bất kỳ khác xem có được không?

 

Trên đây chỉ là một ví dụ đơn giản thay vì phải vào một trang web và thực hiện nhiều bước thì bây giờ bạn chỉ cần vào Facebook và gửi một ký tự bấy kỳ là có thể lấy ra được thông tin mà mình muốn. Nó giảm khá nhiều thao tác khi mà phải làm theo cách thông thường, giúp bạn có thời gian làm nhiều việc khác.

Leave a Reply

Your email address will not be published. Required fields are marked *