如何使用Puppeteer关闭Chrome的地理位置许可请求?我将page.on
放置在各处,并尝试使用confirm
,dialog
,alert
和prompt
。我还阅读了以下链接,但找不到解决方案:
我的脚本:
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();
答案 0 :(得分:2)
这是“ headless:false”的工作方式,但无法使其在“ headless:true”下工作。
注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.geolocation
中page.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')
答案 2 :(得分:1)
// page.setGeolocation(options)
const context = browser.defaultBrowserContext();
await context.overridePermissions(url, ['geolocation']);