Переопределение showOpenFilePicker с помощью Puppeteer

Как показано здесь , Puppeteer позволяет переопределять функции Javascript. Я хочу переопределить функцию showOpenFilePicker. То есть, когда showOpenFilePicker вызывается веб-страницей. Я хочу запустить другую функцию перед showOpenFilePicker.

      const puppeteer = require("puppeteer");

(async () => {
  const browser = await puppeteer.launch({ headless: false });
  const page = await browser.newPage();

  await page.evaluateOnNewDocument(() => {
    Object.defineProperty(HTMLCanvasElement.prototype, "toBlob", {
      value: () => {
        console.log("Hey there");
      },
    });
  });

  await page.goto("https://example.com");

  await page.evaluate(() => {
    console.log(HTMLCanvasElement.prototype.toBlob.toString());
  });

  // await browser.close();
})();

1 ответ

Вы можете переопределить встроенные функции в Puppeteer, как в примере кода ниже. Это заменяет исходную функцию переопределением, которое записывает аргументы в консоль.

      const puppeteer = require("puppeteer");

(async () => {
  const browser = await puppeteer.launch({ headless: false });
  const page = await browser.newPage();

  await page.evaluateOnNewDocument(() => {
    const originalShowOpenFilePicker = window.showOpenFilePicker;
    window.showOpenFilePicker = (...args) => {
      console.log('Modified `showOpenFilePicker` called with these arguments:', args);
      return originalShowOpenFilePicker(...args);
    };
  });

  await page.goto("https://example.com");

  await page.evaluate(() => {
    console.log(showOpenFilePicker());
  });

  // await browser.close();
})();
Другие вопросы по тегам