You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

page-worker.ts 1.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import * as puppeteer from "puppeteer";
  2. import * as fs from "fs/promises";
  3. import * as path from "path";
  4. import { dequeue } from "./database";
  5. const flag = process.env.FLAG ?? "flag{missing}"
  6. const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
  7. const visitOne = async () => {
  8. const url = await dequeue();
  9. if (url === undefined) {
  10. await sleep(500);
  11. return;
  12. }
  13. const browser = await puppeteer.launch({
  14. dumpio: true,
  15. pipe: true,
  16. args: ['--no-sandbox', '--disable-setuid-sandbox']
  17. });
  18. const page = await browser.newPage();
  19. await page.setCookie({
  20. name: "flag",
  21. value: flag,
  22. domain: "localhost:3838",
  23. })
  24. await Promise.race([
  25. page.goto(url),
  26. sleep(3000),
  27. ]);
  28. await sleep(3000);
  29. await browser.close();
  30. }
  31. export const startVisiting = async () => {
  32. while (true) {
  33. try {
  34. await visitOne();
  35. } catch (e) {
  36. console.error(e);
  37. }
  38. }
  39. }