基本环境信息
"puppeteer-core": "^5.2.1"
"puppeteer": "^1.20.0"
macOS Mojave 10.14.1
Chrome85
基本的浏览器设置
const browser = await puppeteer.launch({
// 忽略https授权错误
ignoreHTTPSErrors: true,
// 打开浏览器
headless: false,
slowMo: 50, defaultViewport: null, args: [
'--window-size=1920,1080',
'--disable-extensions',
'--auto-open-devtools-for-tabs',
// '--disable-gpu-sandbox',
// '–single-process',
// '–-disable-gpu=true',
// '–-disable-dev-shm-usage',
// '–-disable-setuid-sandbox',
// '–-no-first-run',
// '–-no-sandbox',
// '–-no-zygote',
// '–-single-process'
]
});
// 仅打开目标页
const page = (await browser.pages())[0];
指定chrome程序
const browser = await puppeteer.launch({
executablePath: 'chrome执行程序路径'
}))
指定chrome用户文件夹
方法一:
const browser = await puppeteer.launch({headless:false,
userDataDir:'/test',
});
注意:puppeteer会在你指定的userDataDir路径下再生成Default
文件夹,并也就是说此时你的用户文件夹为/test/Default
,用来存储用户信息。
方法二:
使用chrome的启动参数。
const browser = await puppeteer.launch({
headless:false,
args:[
'--user-data-dir=/Users//Library/Application Support/Google/Chrome/',
'--profile-directory=Profile 1',
]
});
这个方式可以完全指定用户文件夹来启动Chrome。
注意:自用的chrome浏览器往往存在多个用户。一旦自用的chrome已经在使用,再使用puppeteer启动同个chrome会报这个错误:
(node:80200) UnhandledPromiseRejectionWarning: Error: Failed to launch chrome!
PS:查看chrome用户的个人资料路径
或者chrome程序自身位置
可以在浏览器地址栏输入chrome://version/
屏蔽指定类型资源的请求
const blockTypes = new Set(['image', 'media', 'font'])
await page.setRequestInterception(true)
page.on('request', request => {
const type = request.resourceType()
const shouldBlock = blockedTypes.has(type)
this.debug('onRequest', { type, shouldBlock })
return shouldBlock ? request.abort() : request.continue()
})
上传文件
// 点击 选择文件
await page.waitFor(utilFun.random(1000, 3000));
const upload_file = await page.$("input[type=file]");
await upload_file.uploadFile("你的文件路径");
网友评论