summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2024-03-31 19:33:10 +0300
committerJan Tuomi <jans.tuomi@gmail.com>2024-03-31 19:33:16 +0300
commitdc9b4e6af1b6b90c0e69fec1e2499ab8548d9347 (patch)
treebd1c6a0478aa1ec5077cf1cad0c7f4d77ab6489b
parenta14845b885c0f36800db0aa7e05968e87bc16485 (diff)
Share browser instance
-rw-r--r--src/browser.ts13
-rw-r--r--src/instagram_task.ts7
-rw-r--r--src/tiktok_task.ts7
3 files changed, 17 insertions, 10 deletions
diff --git a/src/browser.ts b/src/browser.ts
new file mode 100644
index 0000000..b09d167
--- /dev/null
+++ b/src/browser.ts
@@ -0,0 +1,13 @@
+import puppeteer, { Browser } from "puppeteer";
+
+let _browser: Browser | undefined = undefined;
+
+export const getBrowser = async () => {
+ if (!_browser || !_browser.connected) {
+ _browser = await puppeteer.launch({
+ headless: false,
+ args: ["--shm-size=1gb"],
+ });
+ }
+ return _browser;
+};
diff --git a/src/instagram_task.ts b/src/instagram_task.ts
index bea1e38..4e31518 100644
--- a/src/instagram_task.ts
+++ b/src/instagram_task.ts
@@ -1,6 +1,7 @@
import fs from "fs";
import puppeteer, { TimeoutError } from "puppeteer";
import { wait } from "./utils";
+import { getBrowser } from "./browser";
export interface InstagramTask {
type: "download_instagram";
@@ -10,10 +11,7 @@ export interface InstagramTask {
}
export const runDownloadInstagramTask = async (task: InstagramTask) => {
- const browser = await puppeteer.launch({
- headless: false,
- args: ["--shm-size=1gb"],
- });
+ const browser = await getBrowser();
const page = await browser.newPage();
const client = await page.createCDPSession();
await client.send("Page.setDownloadBehavior", {
@@ -126,6 +124,5 @@ export const runDownloadInstagramTask = async (task: InstagramTask) => {
await task.respondWithFile(`./downloads/${downloadedFile}`);
} finally {
await page.close();
- await browser.close();
}
};
diff --git a/src/tiktok_task.ts b/src/tiktok_task.ts
index f9099b4..7e85c5c 100644
--- a/src/tiktok_task.ts
+++ b/src/tiktok_task.ts
@@ -1,6 +1,7 @@
import fs from "fs";
import puppeteer, { TimeoutError } from "puppeteer";
import { wait } from "./utils";
+import { getBrowser } from "./browser";
export interface TikTokTask {
type: "download_tiktok";
@@ -10,10 +11,7 @@ export interface TikTokTask {
}
export const runDownloadTiktokTask = async (task: TikTokTask) => {
- const browser = await puppeteer.launch({
- headless: false,
- args: ["--shm-size=1gb"],
- });
+ const browser = await getBrowser();
const page = await browser.newPage();
const client = await page.createCDPSession();
await client.send("Page.setDownloadBehavior", {
@@ -127,6 +125,5 @@ export const runDownloadTiktokTask = async (task: TikTokTask) => {
await task.respondWithFile(`./downloads/${downloadedFile}`);
} finally {
await page.close();
- await browser.close();
}
};