はじめに
この記事は2023年度の振り返りです。
今回は、グループウェアのカレンダー情報を取得するためにやった内容となります
問題点
グループウェアからデータを抜き取って利用することを考えていたのですが、利用しているグループウェアにAPIが存在していないことことが分かり、スクレイプする方針にしました。
ただし、スクレイプするにしても、ツールは複数。
- selenium
- cypress
- puppeteer
- playwright
自分は、認証画面があることからseleniumをチョイスしました
(rspecのsystem testでもseleniumが利用してることがありましたので。。。)
ざっくり調査
seleniumには、いくつかの実行モードがあります。
- スタンドアロン
- ブラウザが限定され
- ハブとノード
- ブラウザの種類別にノードを建てることができ、どのブラウザで実行するとか設定することができる。
- また、バージョン毎にノードを分けることでバージョン毎に実施などができる
- (例外)ダイナミックグリッド
- 基本的な動きはハブとノードと同じ
- ハブに実行依頼が着たら、ノードをコンテナで立ち上げ、コンテナ内で実施する
- 実施が終われば、コンテナは破棄される
遊ぶ
コチラの記事を元に、色々遊ばせてもらいました
compose.yml
services:
node-red:
image: nodered/node-red:latest
ports:
- "1880:1880"
restart: always
# Standalone
standalone-chrome:
image: selenium/standalone-chrome:4.16.1-20231212
ports:
- 4444:4444
shm_size: 2g
environment:
SE_VNC_PASSWORD: 'password'
SE_SESSION_REQUEST_TIMEOUT: 10
SE_SESSION_RETRY_INTERVAL: 10
# # Hub and Nodes
# selenium:
# container_name: kbot_selenium
# image: selenium/hub:4.14.1
# hostname: selenium
# ports:
# - '4444:4444'
# tty: true
# stdin_open: true
# chrome:
# container_name: kbot_chrome
# image: selenium/node-chrome:4.14.1
# depends_on:
# - selenium
# environment:
# TZ: Asia/Tokyo
# SE_EVENT_BUS_HOST: selenium
# SE_EVENT_BUS_PUBLISH_PORT: 4442
# SE_EVENT_BUS_SUBSCRIBE_PORT: 4443
# SE_SESSION_REQUEST_TIMEOUT: 10
# SE_SESSION_RETRY_INTERVAL: 10
# SE_NODE_MAX_SESSIONS: 40
# SE_NODE_OVERRIDE_MAX_SESSIONS: 'true'
# SE_VNC_PASSWORD: 'password'
# volumes:
# - /dev/shm:/dev/shm
# shm_size: '2gb'
# tty: true
# stdin_open: true
さいごに
seleniumは重かったり、遅かったりという問題点はあるものの、確実に操作していくことから一番確実に動くものだと思っています。(歴史も古く記事も多いですし)
また、今回node-redで利用して遊んでましたが、node-redの場合システムに詳しくない人でも比較的触りやすいと思いますので、E2Eテストなどの敷居も下がるのではないかと思ってたりします。
この記事は以上となります。薄いですが、ご容赦ください。
(何かの機会に調査することがあれば、別途作成したいと思います)