木偶:关闭地理位置许可请求

时间:2018-07-08 06:14:16

标签: 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();

3 个答案:

答案 0 :(得分:2)

这是“ headless:false”的工作方式,但无法使其在“ headless:true”下工作。

  1. 在命令行中添加了“ --user-data-dir = C:/ Users / [USER] / PATH / TO / MY / DIRECTORY / myUserDataDir”(请参阅​​注释1)
  2. 在puppeteer.launch()中的脚本中添加了“ userDataDir:'./myUserDataDir'”。
  3. 在puppeteer.launch()中设置为“ headless:false”。
  4. 从命令行运行脚本。 “节点C:/ Users / [USER] /PATH/TO/MY/DIRECTORY/script.js --user-data-dir = C:/ Users / [USER] / PATH / TO / MY / DIRECTORY / myUserDataDir“(阅读注释1)
  5. 打开铬,打开页面并打开弹出窗口。单击弹出按钮,然后关闭浏览器。选择已保存
  6. 下次运行脚本时,不会打开弹出窗口,并且页面将完成加载。(请参阅注释2)

注1:建议在命令行中使用--user-data-dir =,但似乎没有任何效果。没有它,该脚本将起作用。

注2:我无法使它在无头模式下工作。挂了!我怀疑需要在myUserDataDir文件中手动更改某些内容。有人知道吗?

console.log("\nProcess Started");

//sample webpage
let webPage = "https://www.mta.org.nz/find-an-mta/?";

const puppeteer = require("puppeteer");

async function main() {
    const browser = await puppeteer.launch({
        userDataDir: "C:/Users/[USER]/PATH/TO/MY/DIRECTORY/myUserDataDir", //New line added
        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();

答案 1 :(得分:1)

Puppeteer API(v1.5.0)当前does not support catching permission requests(将允许授予/拒绝地理位置许可),但作为解决方法,您可以在patch 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')

demo

答案 2 :(得分:1)

// page.setGeolocation(options)

const context = browser.defaultBrowserContext();
await context.overridePermissions(url, ['geolocation']);

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