LoginSignup
10
3

More than 5 years have passed since last update.

[botkit × Nightmarejs] 指定されたURLのスクリーンショットをとるチャットボットを作ってみた

Last updated at Posted at 2016-12-10

slack のチャットボットフレームワークである botkit
Nightmare というヘッドレスブラウザで自動テストなど書けるライブラリを使って
Webサイトのキャプチャーを撮ってslackに投稿してくれるchatbotを作ってみました。

デモ画像
demo.gif

使い方

リポジトリは以下
https://github.com/tamanugi/site-capture-bot

$ npm install
$ token=<your bot token> node bot.js

上記コマンドで botkit が起動します。
あとはslackで

@chatbot capture http://hoge.com

と話しかければ、指定されたURLのスクリーンショットを取得し、チャンネルに投稿します。

ちょっとハマったところ

botkit でURLを正規表現で抽出

URLを含むメッセージをbotkitで受け取るときURLは<>に囲まれて渡されるので
controller.heaers に書く正規表現は下記のようになる。

controller.hears(['capture <(https?://.*)>'], 

これに気づかなくてなんでchatbotが反応してくれないのか
悩んでしまった。。。

botkitで画像をslackにアップロードする

以前はできなかったようで軽く調べても情報がでてこなかった。
botkitのissuesとか探してたら修正されているのに気づいた。

こちらは別の記事にも書きました。
Botkitで画像ファイルをslackにアップロードする

Nightmareでサイト全体のスクリーンショットを取る

Nightmare では以下のコードでスクリーンショットを取得できるのですが、

  Nightmare();
  .goto(url)
  .screenshot('path/to/image.png')

これだとブラウザで見れる範囲しかスクリーンショットを取得できません。

そこでサイト全体をスクリーンショットする方法を探していたところ
以下のissueをみつけました。

こちらのissueを参考に body タグの幅と高さを取得し、
viewportに設定することでサイト全体のスクリーンショットを取得しています。

この方法をもうちょっと変えれば指定されたセレクタのみのスクリーンショットを取得することも
できそうです。

10
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
3