第一章-puppeteer与函数计算的紧密结合

栏目: Node.js · 发布时间: 4年前

内容简介:首先,我确定的告诉你最关心的话题,该文章程序以这个程序已经集成到部署不是难,下载比较难.真的难~(我文章会把环境给出来的)

首先,我确定的告诉你最关心的话题,该文章程序以 最简单的方式运行并且能够跑起来 (因此其中涉及到翻墙下载,在我部署环境的过程中就遇见很多坑),我会把 整个程序环境给你且能.下载既running .

第一章-puppeteer与函数计算的紧密结合

亮点

这个程序已经集成到 阿里云的函数计算 ,只需要把文件打包上传函数计算,不用部署环境直接运行.这是一个非常大的亮点.

部署不是难,下载比较难.真的难~(我文章会把环境给出来的)

总该介绍一下它吧?

我的见解

puppeteer n. 演木偶戏的人;操纵木偶的人. 就是你写程序,操纵网页. 比如你人工填写一个网页表单需要10分钟(包括上传图片). 而puppeteer只需要1分钟.

官方解释

puppeteer n. 演木偶戏的人;操纵木偶的人 Puppeteer 是一个 Node 库,它提供了一个高级 API 来通过DevTools协议控制 Chromium 或 Chrome。Puppeteer 默认以 headless模式运行,但是可以通过修改配置文件运行“有头”模式。Headless Chrome 是 Chrome 浏览器的无界面形态,可以在不打开浏览器的前提下,使用所有 Chrome 支持的特性运行你的程序

它能做什么?

我的见解

  • 爬虫
  • 程序模拟用户操作 ######官方解释
  • 生成页面 PDF。
  • 抓取 SPA(单页应用)并生成预渲染内容(即“SSR”(服务器端渲染))。
  • 自动提交表单,进行 UI 测试,键盘输入等。
  • 创建一个时时更新的自动化测试环境。 使用最新的 JavaScript 和浏览器功能直接在最新版本的Chrome中执行测试。
  • 捕获网站的 timeline trace,用来帮助分析性能问题。
  • 测试浏览器扩展。

它与其他类似框架的优势?

表格对比

第一章-puppeteer与函数计算的紧密结合
根据上面的图,第二名Node puppeteer(对于前端人员来说学习成本低),使用的是node,第三名,用 Python 做爬虫的各位,不要再用 PhantomJS 了,因为 PhantomJS 已死,证实:超人牙,第一名是使用的python,对前端人员不友好.但是我再送一篇文章给你们

为什么why-puppeteer-is-better-than-selenium

超人牙

中文文档传送门

超人牙

示例代码(到**网站,返回该页面的数据)

'use strict';

const setup = require('./starter-kit/setup');
const fs = require('fs');

exports.handler = async (request, response, context) => {
  const browser = await setup.getBrowser(context);
  const queries = request.queries;

  exports.run(browser, queries).then(result => response.send(result)).catch(err => response.send(err));
};

exports.run = async (browser, queries) => {
  let account = queries['account'] ? queries['account'] : ''; 
  let password = queries['password'] ? queries['password'] : ''; 
  const page = await browser.newPage();
  await page.goto('https://www.*******/');
  await page.waitFor(3000);
  let sText = await page.$eval('body', el => el.innerText);
  return sText;
};
复制代码

常见问题

  • 如果获取不到dom,需要你去看看是否该dom在一个iframe内.
let iframe = await page.frames().find(f => f.name().substr(0, 3) == '155');
复制代码
  • 如果获取元素的节点是动态变化怎么办? 删除动态id或者name,再右键获取dom节点
  • 适当的等待优化程序
await page.waitFor(2000); 
复制代码
  • 获取内容
let sText await page.$eval('body > div.popbox > ul', el => el.innerText); 
复制代码
  • 读取远程图片并存储到本地,然后上传input标签(图片)
// 上传反面照片
  try {
    let url = cardback1; // 第二步骤的第一个身份证
    let opts = {
      url: url // 图片地址
    };
    var time2 = new Date().getTime();
    let path = "/tmp/"+ time2+".png";
    let r1 = await new Promise((resolve, reject) => {
      request.get(opts).on('response', response => {
        console.log("img type:", response.headers['content-type']);
      }).pipe(fs.createWriteStream(path)).on("error", e => {
        console.log("pipe error", e);
        resolve('');
      }).on("finish", () => {
        console.log("finish");
        resolve("ok");
      }).on("close", () => {
        console.log("close");
        resolve();
      });
    });
  } catch (e) {
    console.log(e);
  }
  await iframe7.waitFor(3000);


  // 上传背面身份证
  console.log('开始上传背面身份证');
  const filePath2 = "/tmp/"+ time2+".png";
  const input2 = await iframe7.$('#fm');
  await input2.uploadFile(filePath2);
  await iframe7.waitFor(5000);
  console.log('完成背面的身份证上传');
复制代码

程序

  • 使用 : 下载安装包,解压,到根目录: npm run local 完事~
  • 解释 : 程序比较大(包含了Chromium浏览器)
  • 下载地址 : pan.baidu.com/s/170Z1naEU…
  • 提取码 : 4jxe 大概450M
  • 下载不下来的可以私聊我发给你哦~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

软件研发之道

软件研发之道

Jim McCarthy、Michele McCarthy / 赵 俐、石华耀 / 人民邮电出版社 / 2011-8 / 45.00元

Jim McCarlthy等的《软件研发之道 微软开发团队的经验法则》叙述 了微软Visual C++开发团队的故事,通过作者的总结和归纳告诉读者如何 构建一个优秀的软件开发团队,如何在一段时间内成功地交付一个软件。 作为升级版,作者将言简意赅的法则扩展到57条,包括了软件研发及营销 的全部内容,相信每一位项目经理都会对此书爱不释手。 《软件研发之道 微软开......一起来看看 《软件研发之道》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具