重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
【简介】
网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、微信小程序、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了天门免费建站欢迎大家使用!
Puppeteer 是一个 Node 库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。Puppeteer 默认以 headless 模式运行,但是可以通过修改配置文件运行“有头”模式。
GitHub 网址:https://github.com/GoogleChrome/puppeteer
官网文档:https://pptr.dev/
官方文档中文版:https://zhaoqize.github.io/puppeteer-api-zh_CN/#?product=Puppeteer
【准备工作】
下载并安装,选 LTS 版本即可:https://nodejs.org
安装 puppeteer
npm install puppeteer --registry=https://registry.npm.taobao.org
【51cto.js】
/*! * walker@2019-07-13: 测试 puppeteer,得到网页截图和html */ `use strict`; const puppeteer = require('puppeteer'); const fs = require("fs"); // 得到一个两数之间的随机整数,包括两个数在内 function GetRandInt(min, max) { min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min + 1)) + min; //含最大值,含最小值 } // 下载一篇文章 async function DownOneArticle(page, rawid) { console.log('DownOneArticle %s ...', rawid); url = 'https://blog.51cto.com/walkerqt/' + rawid; console.log('goto %s ...', url); await page.goto( url, { // timeout: 90*1000, referer: 'https://blog.51cto.com/walkerqt' }); let selector = 'div.artical-copyright'; console.log('waitForSelector: %s ...', selector); await page.waitForSelector( selector, // 指定等待 css { timeout: 10 * 1000 } ); await page.waitFor(GetRandInt(2, 5) * 1000); // 随机睡眠几秒 await page.screenshot({ path: rawid + '.png' }); // 保存截图 let html = await page.content(); fs.writeFileSync(rawid + ".html", html); // 保存网页 } (async () => { const browser = await puppeteer.launch({ // 启动浏览器 headless: false, // 是否启用无头模式 args: [ '--no-sandbox', // '--proxy-server=http://192.168.30.3:8080' // 代理 ] }); const page = await browser.newPage(); let url = 'https://blog.51cto.com/walkerqt'; // 首页 console.log('goto %s ...', url); await page.goto(url); let xpath = '//*[@id="Tab"]/div[@class="artical-tit"]'; console.log('waitForXPath: %s ...', xpath); await page.waitForXPath( // 指定等待 xpath xpath, { timeout: 10 * 1000 } ); await page.waitFor(GetRandInt(2, 5) * 1000); // 随机睡眠几秒 let rawidArray = ['2419918', '2415142', '2413401', '2396430'] for (let idx in rawidArray) { try { await DownOneArticle(page, rawidArray[idx]); } catch (error) { console.log('* stack:\n %s', error.stack); } } console.log("Good boy! Game over!"); await browser.close(); // 关闭浏览器 })();
【运行】
运行
node 51cto.js
【相关阅读】
mozilla 讲 JavaScript 随机数生成:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/random
Node.js Tips
*** walker ***