Puppeteer:关闭地理位置权限请求

Kev*_*vin 3 javascript puppeteer

如何使用 Puppeteer 关闭 Chrome 的地理定位权限请求?我已经放在page.on任何地方,并尝试使用confirmdialogalertprompt。我还阅读了以下链接,但找不到解决方案:

我的脚本:

console.log("\nProcess Started");
//sample webpage
let webPage = "https://www.mta.org.nz/find-an-mta/?location=us";

const puppeteer = require("puppeteer");

async function main() {
  const browser = await puppeteer.launch({
    headless: false
  });
  const page = await browser.newPage();
  await page.setViewport({
    width: 1600,
    height: 900
  });

  try {
    await page.goto(webPage);
    await page.waitForSelector("body");
    await console.log("Loaded: " + webPage);
  } catch (err) {
    console.log("Error: " + webPage + "\n" + err);
  }

  await page.waitFor(10000);

  browser.close();
  await console.log("Process Ended \n");
};
main();
Run Code Online (Sandbox Code Playgroud)

ton*_*y19 6

Puppeteer API (v1.5.0) 目前不支持捕获权限请求(这将允许授予/拒绝地理位置权限),但作为解决方法,您可以修补navigator.geolocationpage.evaluateOnNewDocument()

await page.evaluateOnNewDocument(function() {
  navigator.geolocation.getCurrentPosition = function (cb) {
    setTimeout(() => {
      cb({
        'coords': {
          accuracy: 21,
          altitude: null,
          altitudeAccuracy: null,
          heading: null,
          latitude: 23.129163,
          longitude: 113.264435,
          speed: null
        }
      })
    }, 1000)
  }
});

await page.goto('https://www.mta.org.nz/find-an-mta/?location=us')
Run Code Online (Sandbox Code Playgroud)

演示


小智 5

// page.setGeolocation(options)

const context = browser.defaultBrowserContext();
await context.overridePermissions(url, ['geolocation']);
Run Code Online (Sandbox Code Playgroud)

https://pptr.dev/#?product=Puppeteer&version=v1.18.1&show=api-browsercontextoverridepermissionsorigin-permissions