爬虫应用示例--puppeteer数据抓取的实现方法(续2)
本文是“爬虫应用示例--puppeteer数据抓取的实现方法(续1)”的后续,主要讲解了常用的几个自动化操作实现方法。
1、打开浏览器
await puppeteer.launch({
ignoreHTTPSErrors:true, //是否在导航期间忽略 HTTPS 错误. 默认是 false
headless:false, // 是否以无头模式运行浏览器,默认是 true
slowMo:250, // 将 Puppeteer 操作减少指定的毫秒数。这样你就可以看清发生了什么。在开发阶段使用此属性,在生产阶段,注销此属性,这样可以提高软件的执行效率
timeout:0 // 等待浏览器实例启动的最长时间(以毫秒为单位),0是禁止超时
})
以上语句实际上是创建一个浏览器的实例,一般配置以上4个参数足够了,具体如果还需要指定更多的创建方式,可以参见这里。
如果希望异步操作,则可以去掉await。
2、自动打开指定网页
创建浏览器实例实际上是一个promise,成功后才可以执行自动打开指定网页等以下命令。
await puppeteer.launch({
。。。。。。
}).then(async browser => {
。。。。。
let page = await browser.newPage(); //在打开的浏览器中新建一个标签
await page.setJavaScriptEnabled(true); //允许js脚本
await page.goto("https://www.baidu.com/"); //打开百度首页
。。。。。
});
3、自动填写输入框
const obj_input = await page.$("#txtCompanyName"); //找到id=txtCompanyName的input输入框
await obj_ input .focus(); //使该输入框获得焦点
await page.keyboard.type("华为"); //自动在该输入框内填写华为两个字
以上是根据id定位输入框的,也可以用坐标、classname等更多方法定位。
4、自动在下拉框中选择指定项
await page.waitFor('#drpQualificateLevel'); //id= drpQualificateLevel的select组件中数据全部加载完毕
await page.select('#drpQualificateLevel','11'); //自动选择该select中value=11的选择项
5、自动点击指定命令按钮
let btnSearch = await page.$("#btnSearch"); //找到id=btnSearch的命令按钮
await btnSearch.click(); //自动单击该命令按钮
await page.waitForNavigation() ; //确保以上单击事件执行完成,这个语句如果没有,在单击命令刷新页面时,后续获取数据可能取不到,或者获取不完整
6、自动提取表格中的数据
await page.waitFor('#dgDwList'); //等待id=dgDwList的table中的数据全部加载完毕
let data1 = await page.$$eval('#dgDwList tr', tds => tds.map((tr) => { return tr.innerText.split('\t'); })); //将table中数据全部提取出来放到变量data1中
7、自动点击指定超级链接
let btnNext = await page.$("#btnNext"); //定位id= btnNext的超级链接<a id='btnNext' ..... />
await btnNext.click(); //自动点击该超级链接
await page.waitForNavigation() ; //确保页面刷新完成
这个命令await page.$eval("#btnNext",obj => obj.href);可以获取超级链接的href值。
8、自动关闭浏览器
await browser.close();
puppeteer功能非常强大,以此为基础实现一个RPA,可以满足大部分的自动化要求。