👺
docker, playwright, typescriptでスクレイピング用のボイラープレートを作成した
tl;dr
事の経緯
webサイトからAPI情報を何百行と取得する必要があり、だるかったので簡略化したかった。
自動化とは言えないだろうが、相当な簡略化になるはず。
紹介
ディレクトリ構成
├── outputs
├── src
│ ├── libs
│ └── scripts
-
outputs
出力したいファイルはここの配下に作成する。src/dir1/dir2/index.ts
で出力されるスクショはoutputs/dir1/dir2/index/ss/sample.png
のように出力する(ように最初は設定してある)。 -
src/libs
おなじみのlib。隠蔽したい処理などはここに書く。 -
scripts
メインで触る部分。実際に実行される処理を書いたtsファイルを配置する。
使い方
- playwrightがないのでとりあえずプロジェクトルートで
npm i
- 実行ファイルをscripts配下に作成(例えば
scripts/google/takeHPScreenShot.ts
) - やりたい処理を書く
// takeHPScreenShot.ts
import { fileURLToPath } from "url";
import { initPlaywrightFunc } from "../libs/init-playwright-func.js";
import playwright from "playwright";
// 注意点1 関数をエクスポートすること
// 注意点2 関数は`(page: playwright.Page) => Promise<void> | void`の型であること
export const takeHPScreenShot = async (page: playwright.Page) => {
const __filename = fileURLToPath(import.meta.url);
const { takeSS } = initPlaywrightFunc(__filename, page);
await page.goto("https://www.google.com/");
await takeSS("google.png");
};
- src/index.tsの内容を書き換える
import { container } from "./container.js";
import { example } from "./scripts/example.js";
await container(example); // これをコメントアウト
// ---これを追加
import { takeHPScreenShot } from "./scripts/google/takeHPScreenShot.js";
await container(takeHPScreenShot);
// ---これを追加
- shで
docker-compose up
を実行 - 正常に終了すれば
outputs/google/takeHPScreenShot/ss/google.png
が作成されている
フィシルコムのテックブログです。マーケティングSaaSを開発しています。 マイクロサービス・AWS・NextJS・Golang・GraphQLに関する発信が多めです。 カジュアル面談はこちら(ficilcom.notion.site/bbceed45c3e8471691ee4076250cd4b1)から
Discussion