WebシステムでCSVによるデータのインポートやエクスポートの機能をよく見かけます。
求人サイトや不動産サイトなどを複数利用していて、あるサイトからデータをエクスポート、加工・編集して別のサイトへインポートしている方もいらっしゃるのではないでしょうか。
面倒な作業ですし、ついつい忘れてしまうこともあります。このような作業を自動化したいと思われた方も多いと思います。
今回は、NightmareJSというブラウザを使った自動処理を行えるツール(ホームページにはhigh-level browser automation libraryと書かれています)を使ってファイルのダウンロード、アップロードを自動化する方法を紹介します。
■ダウンロード
nightmare-download-managerというプラグインを利用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
var Nightmare = require('nightmare'); require('nightmare-download-manager')(Nightmare); var vo = require('vo'); vo(function* () { var nightmare = Nightmare({ show: true }); nightmare.on('download', function(state, downloadItem){ if(state == 'started'){ nightmare.emit('download', './data.csv', downloadItem); } }); var ret = yield nightmare .goto('http://localhost/admin/index.php') .insert('input[name="id"]', 'username') .insert('input[name="pass"]', 'password') .click('input[type="submit"]') .wait('input[value="ダウンロード"]') .downloadManager() .click('input[value="ダウンロード"]') .waitDownloadsComplete() .then(function () { console.log('done'); }); yield nightmare.end(); })(function (err, result) { if (err) return console.log(err); }); |
■アップロード
nightmare-uploadというプラグインを利用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
var Nightmare = require('nightmare'); require('nightmare-upload')(Nightmare); var vo = require('vo'); const path = require('path'); vo(function* () { var nightmare = Nightmare({ show: true }); yield nightmare .goto('http://localhost/admin/index.php') .insert('input[name="id"]', 'username') .insert('input[name="pass"]', 'password') .click('input[type="submit"]') .wait('input[value="アップロード"]') .upload('input[name="file"]', path.join(__dirname, 'data.csv')) .click('input[value="アップロード"]') .then(function () { console.log('done'); }); yield nightmare.end(); })(function (err, result) { if (err) return console.log(err); }); |
NightmareJSに限らずスクレイピングツールはブラウザを使った操作をそのまま書き下すようにコードを書けばよいので何をやっているか一目瞭然だと思います。
ブラウザで行っている作業を自動化したいという方は是非一度弊社にご相談ください。スクレイピング、クローラーのご相談も承っております。