Hướng dẫn tự động tìm và tải về các phần mềm của NirSoft.
Mục lục
Các phần mềm NirSoft
NirSoft là nơi chứa bộ sưu tập các công cụ phần mềm hệ thống miễn phí “tuy nhỏ nhưng cực kỳ có võ” được phát triển bởi thanh niên Nir Sofer có địa chỉ tại nirsoft.net.
Một trong những công cụ tôi hay dùng nhất chính là dòng lệnh
NirCmd
.
Ở bài viết này tôi không có ý định nói về mục đích hay cách sử dụng các công cụ này mà vấn đề của tôi là làm sao tải hết chỗ phần mềm ở đó về máy vì …nhiều quá, mỗi cái một trang nhưng lại không có tùy chọn cho tải hết về.
Ừ thì đương nhiên bạn chỉ nên chọn phần mềm nào cần thiết thì mới tải về thôi, nhưng tôi lại coi việc tải hết app từ trang web của anh bạn này là một thử thách vui vẻ.
Tải các phần mềm NirSoft
Các phần mềm NirSoft được liệt kê tại mục All Utilities. đây là một danh sách cỡ hơn 250 phần mềm khác nhau. Mỗi phần mềm lại được mô tả trong một trang HTML và có link tải ở phía dưới cùng. Có thể là bộ cài .exe
hoặc file .zip
, bản 32-bit
hoặc 64-bit
.
Như vậy để tim đến link tải phần mềm, ta cần một công cụ web scraper dò tìm theo quy luật như trên. Tôi quyết định chọn Nightmare.js
.
Lấy danh sách tải phần mềm NirSoft với NightmareJS
Trước dây tôi hay dùng PhantomJS
để đào web, nhưng PhantomJS có rất nhiều giới hạn: Quá nhiều API rườm rà, code viết rất dài và nested và đặc biệt là không hỗ trợ JavaScript ES6. Trái lại, Nightmare.js
khắc phục được những vấn đề trên.
Để sử dụng được Nightmare.js
thì trước hết bạn cần phải cài đặt Node.js.
Cài đặt module Nightmare.js
bằng npm
như sau:
npm install nightmare --save-dev
Đoạn mã findapps.js
dưới đây sử dụng 2 instance Nightmare để đào website NirSoft
- 1 instance duyệt trang All Utilities để lấy danh sách web page phần mềm.
- 1 instance để duyệt từng web page để tìm danh sách link tải về.
Đầu ra của script là một danh sách thông tin về link tải. Tôi không muốn dùng Nightmare để tải file vì đó không phải là thế mạnh của các headless browser.
nirsoft_get_apps.js
const Nightmare = require('nightmare'); const getAppLinks = () => [...document.querySelectorAll('tr.filesrow > td > a.filetitle')] .map( a => [ a.innerText, a.href ] ); const getDownloadLink = () => [ ...document.querySelectorAll('a.downloadline') ] .map(a => a.href); (async () => { try { const nightmare = Nightmare({ show: false }); // Get All Utilities page const apps = await nightmare.goto("https://www.nirsoft.net/utils/index.html") .evaluate(getAppLinks); for (let i = 0; i < apps.length; i++) { // Get the download links const downloads = await nightmare.goto(apps[i][1]) .evaluate(getDownloadLink); downloads.forEach(download => console.log(apps[i][0] + "|" + apps[i][1] + "|" + download)); } } catch (error) { console.error(error); process.exitCode = 1 } finally { await nightmare.end(); process.exit(); } })();
Tải các phần mềm NirSoft
Từ danh sách link phần mềm trên, tôi dùng lệnh tải file rất mạnh là aria2c
– hỗ trợ resume và download nhiều luồng. Nếu là trên Windows, bạn có thể cài đặt Cygwin để có aria2c
và chạy được Shell script dưới đây.
nirsoft_download.sh
#!/bin/bash # Read the input file, the arguments are separated by "|" while IFS="|" read name referer url; do # Each app is downloaded to a separated directory mkdir -p "${name}" echo "Downloading: ${name}" aria2c -s 4 -x 4 -d "${name}" --referer=${referer} ${url} sleep 5 # a short break to avoid blacklisted done
Kết luận
Vậy để tải các phần mềm NirSoft, ta kết hợp hai công cụ như sau:
node ./nirsoft_get_apps.js > nirsoft.txt ./nirsoft_download.sh < nirsoft.txt
Ngồi đợi thôi, lâu phết đấy!