Maksym
Maksym

Reputation: 11

page.evaluateOnNewDocument doesn't work after compilation PKG

this code works as it should if you run it through node index.js, but after compilation pkg stops working.

const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
const findChrome = require('chrome-finder');
const moment = require('moment-timezone');
const UserAgent = require('user-agents');
const stealth = StealthPlugin();
puppeteer.use(stealth);

initialization();

async function initialization() {
  const chromePath = findChrome();
  const browser = await puppeteer.launch({
    executablePath: chromePath,
    args: [
      '--no-sandbox',
      '--disable-infobars',
      '--disable-setuid-sandbox',

      '--disable-extensions',
      '--disable-dev-shm-usage',
      '--disable-gpu',

      '--lang=en',

      '--window-position=0,0',
      '--test-type',
      '--disable-features=site-per-process', // ProcessPerSiteUpToMainFrameThreshold,
      '--ignore-certificate-errors',
      // '--auto-open-devtools-for-tabs',
    ],
    headless: false,
    ignoreDefaultArgs: ['--enable-automation', '--mute-audio'],
    ignoreHTTPSErrors: true,
  });

  browser.on('targetcreated', async target => {
    try {
      if (target.type() === 'page') {
        const newPage = await target.page();
        // const url = newPage.url();
        newPage &&
          newPage.on('framenavigated', async frame => {
            try {
              const newURL = frame?.url();
              if (newURL && newURL.includes('https://www.example.com')) {
                const allTimezones = moment.tz.names();
                const randomTimezoneIndex = Math.floor(
                  Math.random() * allTimezones.length
                );
                const randomTimezone = allTimezones[randomTimezoneIndex];
                const ua = new UserAgent({});
                const { userAgent, viewportWidth, viewportHeight, platform } =
                  ua.data;

                await newPage.setUserAgent(userAgent);
                await newPage.setViewport({
                  width: viewportWidth,
                  height: viewportHeight,
                });
                await newPage.emulateTimezone(randomTimezone);
                await newPage.setBypassCSP(true);
                await newPage.evaluateOnNewDocument(() => {
                  console.log('window', window);
                  Object.defineProperty(window, 'localStorage', {
                    value: {
                      getItem: () => null, // Имитация пустого localStorage
                      setItem: () => null,
                      removeItem: () => null,
                      clear: () => null,
                    },
                    writable: false, // Запрет на изменение localStorage
                    configurable: false, // Запрет на удаление localStorage
                    enumerable: true,
                  });
                });

                await newPage.goto('https://www.google.com');
              }
            } catch (error) {
              console.log('framenavigated err', error.message);
            }
          });
      }
    } catch (error) {
      console.log('targetcreated err', error.message);
    }
  });

  const page = await browser.newPage();
  await page.goto('https://www.example.com');
}

manifest script

  "scripts": {
    "pkg": "pkg ./src/index.js -c ./pkgConfig.json",
  },

pkgConfig.json

 {
  "pkg": {
    "assets": [
      "node_modules/chrome-finder/**/*",
      "node_modules/moment-timezone/**/*",
      "node_modules/puppeteer/**/*",
      "node_modules/puppeteer-core/**/*",
      "node_modules/puppeteer-extra/**/*",
      "node_modules/puppeteer-extra-plugin-stealth/**/*",
      "node_modules/user-agents/**/*"
    ],
    "outputPath": "dist/build"
  }
}


Actually, when running the code through node index.js, localstrge is overwritten and access to local storage for Google is blocked, but after copying there is no

?????????????????

Upvotes: 1

Views: 84

Answers (0)

Related Questions