新規投稿
フォローする

Puppeteerでkintoneを自動操作

以前記事にしたPuppeteerについてです。 今更ですが、基本的な使い方を記事にしてみました。

サンプル

kintoneに自動ログインして、アプリ内に設置したボタンを自動クリックします。 今回はわかりやすさのためにヘッドレスをオフにしていますが、オンにするとPCの画面に表示せずにブラウジングすることができます。

コード

Puppeteerを利用しています。 npm等を用いてインストールします。

・Puppeteerのインストール

$ npm i puppeteer

実行用のコードです。

・sample.js

(async () => {
  const puppeteer = require('puppeteer');
  const url = 'https://****.cybozu.com/k/****/'; //目的のページのURL
  const basicUser = false; //Basic認証のユーザー名(設定していない場合はfalse)
  const basicPassword = false; //Basic認証のユーザー名(設定していない場合はfalse)
  const user = '****'; //kintoneのログインユーザー名
  const password = '****'; //kintoneのログインパスワード

  const browser = await puppeteer.launch({ //ブラウザ起動
    headless: false, //ヘッドレス設定(アニメーション的にわかりやすくするため。実用では不要。)
    slowMo: 50, //スローモーション(アニメーション的にわかりやすくするため。実用では不要。)
    defaultViewport: null //viewport設定(アニメーション的にわかりやすくするため。実用では不要。)
  });
  const page = await browser.newPage();
  if(basicUser && basicPassword){ //Basic認証(設定している場合)
    await page.setExtraHTTPHeaders({
      Authorization: `Basic ${new Buffer.from(`${basicUser}:${basicPassword}`).toString('base64')}`
    });
  }
  await page.goto(url); //ログインページへ遷移
  await page.type('input[name="username"]', user); //kintoneのユーザー名入力
  await page.type('input[name="password"]', password); //kintoneのログインパスワード入力
  await (await page.$('.login-button')).click(); //ログインボタンクリック
  await page.waitForNavigation({waitUntil: "domcontentloaded"}); //目的のページへの遷移を待機

  await page.waitFor('.alert-button');
  await new Promise(resolve => setTimeout(resolve, 1000)); //待ち時間(アニメーション的にわかりやすくするため。実用では不要。)
  await (await page.$('.alert-button')).click(); //アプリに設置したボタン(class名:「alert-button」)をクリック
})();

実行

シェルを用いて、sample.jsがあるディレクトリで下記を実行します。

$ node sample.js

アプリ設置したレコード更新ボタンなどを自動でクリックするといった使い方もできますね。 kintone REST APIを使えばkintone外部からも大抵の操作はできますが、kintone内部用に作成した機能をそのまま使いたいときには便利かもしれません。

2

4件のコメント

Avatar
赤座 久樹

こんにちは!

Puppeteerでのkintone操作といえば、それに特化したライブラリ「Jinzo-Ningen」というのを

弊社SonicGardenのメンバーが作ってたりします。オープンソースです。

https://github.com/goqoo-on-kintone/jinzo-ningen

 

kintone特有の面倒くさい部分をカバーする各種関数を、こんな感じで整備しております。

https://github.com/goqoo-on-kintone/jinzo-ningen/blob/master/doc/reference.md

 

Jestと組み合わせてkintoneの自動テスト(E2Eテスト)をするチュートリアルがこちら!

https://github.com/goqoo-on-kintone/jinzo-ningen/blob/master/doc/tutorial.md

 

 

まだ全然知られてないので、この場を借りて宣伝させてもらいました。

よかったら、ぜひJinzo-Ningenでのスクレイピングも試してみてくださいませ!

4
Avatar
pokemon36

Hello!

It's useful of your article.

And I have a question, when I want to capture the home screen. It will display the error.

How can I solve the problem? Thank you very much!

0
Avatar
pokemon36

It displays when I capture the portal screen  (https://xxx.cybozu.com/k/#/portal)

0
Avatar
江田篤史

Dear pokemon36,

Try setting "--disable-web-security" when starting the browser.

const browser = await puppeteer.launch({ //ブラウザ起動
  args: [
    '--disable-web-security'
  ],
  headless: false, //ヘッドレス設定(アニメーション的にわかりやすくするため。実用では不要。)
  slowMo: 50, //スローモーション(アニメーション的にわかりやすくするため。実用では不要。)
  defaultViewport: null //viewport設定(アニメーション的にわかりやすくするため。実用では不要。)
});
江田篤史により編集されました
0
サインインしてコメントを残してください。