xiongzhu před 1 rokem
rodič
revize
a4e058f72a
3 změnil soubory, kde provedl 78 přidání a 5 odebrání
  1. 1 0
      .gitignore
  2. 43 1
      4.mjs
  3. 34 4
      login.mjs

+ 1 - 0
.gitignore

@@ -1,3 +1,4 @@
 node_modules
 .vscode
 **/.DS_Store
+/cache

+ 43 - 1
4.mjs

@@ -1,8 +1,14 @@
 import { chromium } from "playwright";
-
+import fs from "fs";
+import { dirname, resolve, join } from "path";
+import { fileURLToPath } from "url";
+import stringHash from "string-hash";
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = dirname(__filename);
 const browser = await chromium.launch({
     headless: false,
     devtools: false,
+    args: ["--no-sandbox", "--disable-setuid-sandbox"],
 });
 
 const context = await browser.newContext({
@@ -12,6 +18,12 @@ const context = await browser.newContext({
     },
     locale: "en-CA",
     timezoneId: "America/Toronto",
+    serviceWorkers: "block",
+    // proxy: {
+    //     server: "217.23.2.7:11728",
+    //     username: "12930238-mobile-country-CA",
+    //     password: "2l159221qn",
+    // },
 });
 
 await context.addCookies([
@@ -467,6 +479,36 @@ await context.addCookies([
     },
 ]);
 
+await context.route(
+    /(\.png)|(\.jpg)|(\.svg)|(\.otf)|(\.woff)|(\.woff2)|(\.ttf)|(\.mp3)/,
+    (route, request) => {
+        console.log("Aborting", request.url());
+        route.abort();
+    }
+);
+
+await context.route(/(\.js$)|(\.css)/, async (route, request) => {
+    const fileName = resolve(
+        __dirname,
+        "cache",
+        "" + stringHash(request.url())
+    );
+    if (fs.existsSync(fileName)) {
+        await route.fulfill({
+            body: fs.readFileSync(fileName),
+            contentType: /\.js$/.test(request.url())
+                ? "application/javascript"
+                : "text/css",
+        });
+    } else {
+        const response = await route.fetch();
+        fs.writeFileSync(fileName, await response.body());
+        await route.fulfill({
+            response,
+        });
+    }
+});
+
 const page = await context.newPage();
 
 await page.goto("https://www.pcoptimum.ca/dashboard");

+ 34 - 4
login.mjs

@@ -1,6 +1,13 @@
 import { chromium } from "playwright";
 import uniqueRandomArray from "unique-random-array";
 import userAgents from "top-user-agents";
+import { dirname, resolve, join } from "path";
+import { fileURLToPath } from "url";
+import fs from "fs";
+import stringHash from "string-hash";
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = dirname(__filename);
 
 export async function login(email, password, proxy) {
     const browser = await chromium.launch({
@@ -29,16 +36,39 @@ export async function login(email, password, proxy) {
 
     let points = null;
 
-    await page.route(/points$/, async (route, request) => {
+    await context.route(/points$/, async (route, request) => {
         const response = await route.fetch();
         points = await response.text();
         await route.continue();
     });
-    await page.route(
-        /(\.png)|(\.jpg)|(\.svg)|(\.otf)|(\.woff2)|(\.ttf)|(\.mp3)/gi,
-        (route) => route.abort()
+
+    await context.route(
+        /(\.png)|(\.jpg)|(\.svg)|(\.otf)|(\.woff)|(\.woff2)|(\.ttf)|(\.mp3)/,
+        (route, request) => route.abort()
     );
 
+    await context.route(/(\.js)|(\.css)/, async (route, request) => {
+        const fileName = resolve(
+            __dirname,
+            "cache",
+            "" + stringHash(request.url())
+        );
+        if (fs.existsSync(fileName)) {
+            await route.fulfill({
+                body: fs.readFileSync(fileName),
+                contentType: /\.js$/.test(request.url())
+                    ? "application/javascript"
+                    : "text/css",
+            });
+        } else {
+            const response = await route.fetch();
+            fs.writeFileSync(fileName, await response.body());
+            await route.fulfill({
+                response,
+            });
+        }
+    });
+
     await page.goto("https://www.pcoptimum.ca/");
 
     const link = await page.$('a > span:has-text("sign in")');