木偶操纵者设置 "isMobile:true" 导致 "UnhandledPromiseRejectionWarning"
puppeteer set "isMobile:true" to cause "UnhandledPromiseRejectionWarning"
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
devtools: true,
ignoreHTTPSErrors: true
});
const page = await browser.newPage();
page.setUserAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1');
page.setViewport({
width: 375,
height: 667,
isMobile: true
});
await page.goto('https://google.com', {
waitUntil: 'networkidle2'
});
await page.evaluate(() => {
console.log(window);
})
})();
当我在setViewport()中设置isMobile:true时,chromium正常打开,但是进程报如下错误:
(node:13360) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: net::ERR_ABORTED at https://google.com
(node:13360) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
如何处理?
您正在使用 async await,并且您的代码中存在一些错误,并且没有相同的处理程序,因此每当我们使用 async await 时,我们应该将代码包围在 try catch 块中,这是一个以 try 开始一个函数并以 catch 结束它的良好做法,因此无论何时发生错误,它都会进入 catch 块。
(async () => {
try {
const browser = await puppeteer.launch({
devtools: true,
ignoreHTTPSErrors: true
});
const page = await browser.newPage();
page.setUserAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1');
page.setViewport({
width: 375,
height: 667,
isMobile: true
});
await page.goto('https://google.com', {
waitUntil: 'networkidle2'
});
await page.evaluate(() => {
console.log(window);
})
} catch(error) {
console.log("handle the error here", error)
}
})();
您刚刚错过了 setUserAgent
方法和 setViewport
方法的 await
。
(async () => {
const browser = await puppeteer.launch({
devtools: true,
ignoreHTTPSErrors: true
});
const page = await browser.newPage();
await page.setUserAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1');
await page.setViewport({
width: 375,
height: 667,
isMobile: true
});
await page.goto('https://google.com', {
waitUntil: 'networkidle2'
});
await page.evaluate(() => {
console.log(window);
})
})();
此外,您可以将这些方法替换为emulate
方法。
emulate
方法是调用两个方法的快捷方式:
- page.setUserAgent(用户代理)
- page.setViewport(视口)
不要忘记从 puppeteer 导入设备对象。查看 devices.
的完整列表
const devices = require('puppeteer/DeviceDescriptors');
await page.emulate(devices['iPhone 6'])
因此,您的最终脚本应该是:
const puppeteer = require('puppeteer');
const devices = require('puppeteer/DeviceDescriptors');
(async () => {
const browser = await puppeteer.launch({
devtools: true,
ignoreHTTPSErrors: true
});
const page = await browser.newPage();
await page.emulate(devices['iPhone 6'])
await page.goto('https://google.com', {
waitUntil: 'networkidle2'
});
await page.evaluate(() => {
console.log(window);
})
})();
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
devtools: true,
ignoreHTTPSErrors: true
});
const page = await browser.newPage();
page.setUserAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1');
page.setViewport({
width: 375,
height: 667,
isMobile: true
});
await page.goto('https://google.com', {
waitUntil: 'networkidle2'
});
await page.evaluate(() => {
console.log(window);
})
})();
当我在setViewport()中设置isMobile:true时,chromium正常打开,但是进程报如下错误:
(node:13360) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: net::ERR_ABORTED at https://google.com
(node:13360) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
如何处理?
您正在使用 async await,并且您的代码中存在一些错误,并且没有相同的处理程序,因此每当我们使用 async await 时,我们应该将代码包围在 try catch 块中,这是一个以 try 开始一个函数并以 catch 结束它的良好做法,因此无论何时发生错误,它都会进入 catch 块。
(async () => {
try {
const browser = await puppeteer.launch({
devtools: true,
ignoreHTTPSErrors: true
});
const page = await browser.newPage();
page.setUserAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1');
page.setViewport({
width: 375,
height: 667,
isMobile: true
});
await page.goto('https://google.com', {
waitUntil: 'networkidle2'
});
await page.evaluate(() => {
console.log(window);
})
} catch(error) {
console.log("handle the error here", error)
}
})();
您刚刚错过了 setUserAgent
方法和 setViewport
方法的 await
。
(async () => {
const browser = await puppeteer.launch({
devtools: true,
ignoreHTTPSErrors: true
});
const page = await browser.newPage();
await page.setUserAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1');
await page.setViewport({
width: 375,
height: 667,
isMobile: true
});
await page.goto('https://google.com', {
waitUntil: 'networkidle2'
});
await page.evaluate(() => {
console.log(window);
})
})();
此外,您可以将这些方法替换为emulate
方法。
emulate
方法是调用两个方法的快捷方式:
- page.setUserAgent(用户代理)
- page.setViewport(视口)
不要忘记从 puppeteer 导入设备对象。查看 devices.
的完整列表const devices = require('puppeteer/DeviceDescriptors');
await page.emulate(devices['iPhone 6'])
因此,您的最终脚本应该是:
const puppeteer = require('puppeteer');
const devices = require('puppeteer/DeviceDescriptors');
(async () => {
const browser = await puppeteer.launch({
devtools: true,
ignoreHTTPSErrors: true
});
const page = await browser.newPage();
await page.emulate(devices['iPhone 6'])
await page.goto('https://google.com', {
waitUntil: 'networkidle2'
});
await page.evaluate(() => {
console.log(window);
})
})();