爬虫应用示例--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的超级链接
await btnNext.click();   //自动点击该超级链接
await page.waitForNavigation() ;   //确保页面刷新完成

这个命令await page.$eval("#btnNext",obj => obj.href);可以获取超级链接的href值。

8、自动关闭浏览器

await browser.close();

puppeteer功能非常强大,以此为基础实现一个RPA,可以满足大部分的自动化要求。

你可能感兴趣的:(爬虫应用示例--puppeteer数据抓取的实现方法(续2))