最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • "无头"浏览器初探

    正文概述 掘金(Ichmag)   2021-05-17   1251

    无头浏览器是什么

    无头(headless)浏览器是一种没有图形界面的web浏览器。
    无头浏览器对于测试web页面特别有用,因为它们能够以与浏览器相同的方式展示和解析HTML,包括页面布局、颜色、字体选择以及JavaScript和Ajax的执行等样式元素,而这些元素在使用其他测试方法时通常不可用。[1]

    无头浏览器能做什么

    无头浏览器可以用来做很多事情,包括但不限于:

    1. web页面测试
    2. web页面截图
    3. 将web页面生成pdf文件
    4. 测试javascript库
    5. 自动提交表单
    6. 爬虫

    如何使用无头浏览器

    生成pdf文件

    使用无头浏览器其实很简单,只要安装了node,其实不需要安装任何库也可以使用。
    以chrome为例,chrome提供了许多命令行指令,其中包括使用无头的形式 --headless,chrome的所有启动参数
    如果我们需要将网页展示的内容生成为pdf,则需要用到--print-to-pdf参数,代码如下:

        const process = require('child_process');
        const path = require('path');
    
        const chromeUrl = path.join('F:', 'application', 'Chrome', 'Application', 'chrome'); // 浏览器路径
        const headLess = '--headless'; // 使用无头浏览器
        const disableGpu = '--disable-gpu'; // 不使用硬件渲染
        const action = '--print-to-pdf'; // 将url保存为pdf
        const outputName = path.resolve(__dirname, 'assets', `${ Date.now() }.pdf`); // 保存文件路径
        const printUrl = 'https://juejin.im'; // 向浏览器输入URL
    
        // 创建子进程执行命令
        const result = process.spawnSync(chromeUrl, [
          headLess,
          disableGpu,
          `${ action }=${ outputName }`,
          printUrl,
        ])
    

    执行后会将网页生成pdf文件保存到指定目录
    "无头"浏览器初探 "无头"浏览器初探

    生成网页图片

    同理如果我们需要生成网页快照,只需将上面代码--print-to-pdf改为--screenshot

        const chromeUrl = path.join('F:', 'application', 'Chrome', 'Application', 'chrome'); // 浏览器路径
        const headLess = '--headless'; // 使用无头浏览器
        const disableGpu = '--disable-gpu'; // 不使用硬件渲染
        const action = '--screenshot'; // 将url保存为图片
        const outputName = path.resolve(__dirname, 'assets', `${ Date.now() }.png`); // 保存文件路径
        const printUrl = 'https://juejin.im'; // 向浏览器输入URL
    
        // 创建子进程执行命令
        const result = process.spawnSync(chromeUrl, [
          headLess,
          disableGpu,
          `${ action }=${ outputName }`,
          printUrl,
        ])
    

    抓取网页信息

        const process = require('child_process');
        const path = require('path');
        const fs = require('fs');
    
        const chromeUrl = path.join('F:', 'application', 'Chrome', 'Application', 'chrome'); // 浏览器路径
        const headLess = '--headless'; // 使用无头浏览器
        const disableGpu = '--disable-gpu'; // 不使用硬件渲染
        const action = '--dump-dom'; // 抓取网页信息命令
        const outputName = path.resolve(__dirname, `${ Date.now() }.txt`); // 保存地址
        const printUrl = 'https://juejin.im'; // 向浏览器输入URL
    
        // 创建子进程执行命令
        const result = process.spawnSync(chromeUrl, [
          headLess,
          disableGpu,
          action,
          printUrl,
        ])
        fs.writeFileSync(outputName, result.stdout.toString());
    

    无头浏览器库 puppeteer

    从上面的例子可以看到,其实我们不需要任何插件仅仅需要node和浏览器,就可以调用无头浏览器。但是可以看出来,多且繁杂的启动参数命令使得原生无头浏览器难以使用。因此我们可以使用一些无头浏览器的库简化操作。
    puppeteer 是 Chrome 开发团队在 2017 年发布的一个 Node.js 包,用来模拟 Chrome 浏览器的运行。puppeteer 是用js封装操控浏览器的功能。使我们更容易地调用浏览器的功能。
    如:获取网页截图

    const puppeteer = require('puppeteer');
    const path = require('path');
    
    (async () => {
      const browser = await puppeteer.launch({
        headless: true,
      })
      const page = await browser.newPage(); // 创建一个新页面
      await page.goto('https://juejin.im'); // 新页面跳转到知道地址
      await page.screenshot({ // 调用截图功能
        path: path.resolve(__dirname, 'assets', `${ Date.now() }.png`)
      })
      browser.close();
    })()
    

    将网页转为pdf

    await page.pdf({
      path: path.resolve(__dirname, 'assets', `${ Date.now() }.pdf`)
    })
    

    执行脚本
    自动表单提交

    更多的功能点击这里

    总结

    • 无头(headless)浏览器是一种没有图形界面的web浏览器。
    • 无头浏览器可以用来进行web页面测试,网页截图,将网页生成pdf,测试javscript库,自动提交表单,爬虫等功能

    参考文章

    1. Headless browser, wiki
    2. 无头浏览器 Puppeteer 初探
    3. chrome启动参数大全

    文中如有错误,欢迎在评论区指正


    起源地下载网 » "无头"浏览器初探

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元