在前5篇的基础上,我们应该进入一些脚踏实地的业务。在本文的开头,我们会接触到前端的多语言功能。不知道大家有没有接触过。jsliang这次就把真实项目中的多语言处理脱敏(没错,只是处理,不讲解如何配置多语言)分享一下。本次分享所用数据虚构,仅供参考真实项目。毕竟这只是一个【工具库】而不是构建一个支持多语言的项目。不过这套工具修改后仍然可以在其他地方使用,具有参考价值。这篇文章我们将讲解如何使用Puppeteer来控制Chrome/Chromium下载文件。1前言Puppeteer是一个Node库,它提供高级API以通过DevTools协议控制Chromium或Chrome。正如GitHub介绍中所说:大部分你在浏览器中手动完成的事情都可以用Puppeteer来完成!抓取页面快照生成页面PDF并自动操??作页面DOM...详细示例可以参考本文下方参考文献的GitHub或中文文档,这里不一一举例(免得大家看不懂)被吐槽复制README.md)两个Puppeteer安装:npmipuppeteer!安装jsliang报错:(node:7584)ExperimentalWarning:Thefs.promisesAPIisexperimental我的Node.js版本是node@10.16.0,需要升级Node.js。查了资料,有2种升级方式,一种是下载最新版本覆盖安装,另一种是通过nvm/nvmw管理。jsliang网络还不错,直接下载最新的文档版本:Node官网安装完成后查看最新版本:node-v:v14.??17.1然后安装Puppeteer,说明安装成功,package.jsonshows:"puppeteer":"^10.0.0"在安装Puppeteer的过程中,可能会出现各种报错。考验朋友网速的时候到了。安装完成后,开始搞事情~2.1抓拍快照我们以抓拍页面为例简单说明:src/index.tsimportprogramfrom'commander';importcommonfrom'./common';import'./base/console';从'puppeteer'导入puppeteer;program.version('0.0.1').description('Toollibrary')program.command('jsliang').description('jslianghelpcommand').action(()=>{common();});program.command('test').description('测试通道').action(async()=>{//启动浏览器constbrowser=awaitpuppeteer.launch({headless:false,//打开实体浏览器});//创建新标签并打开constpage=awaitbrowser.newPage();awaitpage.goto('https://www.baidu.com/s?wd=jsliang');//获取快照并保存在本地awaitpage.screenshot({path:'./src/baidu.png',});//关闭窗口awaitbrowser.close();});程序.parse(process.argv);执行npmruntest后,src文件夹下会出现图片文件baidu.png,打开显示如下:实测科学在线工具或360安全卫士会影响本次操作。为了防止你的血压飙升,请确保关闭这些软件,以便我们初步了解Puppeteer。当然也可以导出PDF等,文字自己转[参考资料]详细了解Puppeteer2.2下载文件既然可以截屏,操作DOM也就不足为奇了,下面我们来获取离线文件吧!以金山文档为例,我们先创建一个Excel文件:创建方法大家自己玩吧,就不解释了,金山文档地址:https://www.kdocs.cn/然后,我们下一个链接就是把这个转换成Excel下载后(假设已经有人雇人做翻译工作),就是这个Excel:图片来自网络,此知识分享仅供参考,侵权必删。那我们来个简单的:多语言怎么样重要的,我们的目的是使用Puppeteer来获取这个Excel文件OK,文件是可用的,我们如何下载呢?现在的情况是:想象一下,如果我们通过Puppeteer打开,是一个headlessbrowser,和无痕差不多。如果正常登录,则需要重新登录,输入链接,然后点击按钮进行下载。所以这里使用了金山文档的免登录链接:大家都知道免登录就是不需要登录。这个解释虽然弱智,但我觉得还是有必要的。。。这里是上面的demo地址,小伙伴们可以拿来练习,不过我不确定哪天这个链接会不会被我删掉,所以还是按照上面的自己设置的步骤!【金山文档Excel试用文件.xlsx】:https://www.kdocs.cn/l/sdwvJUKBzkK2OK,罗莉讲了这么多前提条件,我们进入正题——如何获取离线文件:操作浏览器打开https://www.kdocs.cn/l/sdwvJUKBzkK2并休眠6.66s(确保浏览器打开链接并加载页面)然后触发点击[Moremenu]按钮休眠2s(确保moremenubuttonisclicked)设置下载路径(确保下载位置,否则弹窗很难处理)最后触发点击【Download】按钮休眠10s(保证资源已下载)关闭窗口。唯一需要注意的是第5点,因为我们点击Windows会有下载的弹窗(不是默认下载),所以需要提前设置好下载路径(会体现在代码)。那么,上代码吧!src/common/index.tsimport{inquirer}from'../base/inquirer';import{Result}from'../base/interface';import{sortCatalog}from'./sortCatalog';import{downLoadExcel}from'./downLoadExcel';constcommon=():void=>{//提问路径:见questionList.tsconstquestionList=[//q0{type:'list',message:'你需要什么服务?',choices:['公共服务','文件管理']},//q1{type:'list',message:'当前公共服务是:',choices:['文件排序']},//q2{type:'input',message:'需要排序的文件夹?(绝对路径)',},//q3{type:'list',message:'你需要什么支持?',choices:['multilingual','MarkdowntoWord'],},//q4{type:'list',message:'你需要什么支持?',choices:['下载多语言资源','导入多语言资源','导出多语言资源',],},//q5{type:'input',message:'资源下载地址(HTTP)?',默认:'https://www.kdocs.cn/l/sdwvJUKBzkK2',}];constanswerList=[//q0async(result:Result,questions:any)=>{if(result.answer==='publicservice'){questions[1]();}elseif(result.answer==='文件管理'){questions[3]();}},//q1async(result:Result,questions:any)=>{if(result.answer==='filesort'){questions[2]();}},//q2async(result:Result,_questions:any,prompts:any)=>{constsortResult=awaitsortCatalog(result.answer);if(sortResult){console.log('排序成功!');提示.complete();}},//q3async(result:Result,questions:any)=>{if(result.answer==='multilingual'){questions[4]();}},//q4async(result:Result,questions:any)=>{if(result.answer==='下载多语言资源'){questions[5]();}},//q5async(result:Result,_questions:any,prompts:any)=>{if(result.answer){constdownloadResult=awaitdownLoadExcel(r结果.answer);if(downloadResult){console.log('下载成功!');提示.complete();}}},];inquirer(questionList,answerList);};exportdefaultcommon;看到上面我后悔的代码,为什么Inquirer.ts被我改造的这么恶心,以至于jsliang需要写一个专门的文件来标明出题顺序,然后整理出题顺序:src/common/questionList.ts//commonplateproblemConsultingrouteexportconstquestionList={'公共服务':{//q0'文件排序':{//q1'待排序文件夹':'工作',//q2},},'文件管理':{//q0'多语言':{//q3'下载多语言资源':{//q4'下载地址':'工作',//q5},'导入多语言资源':{//q4'导入地址':'Work',},'导出多语言资源':{//q4'导出全资源':'Work','导出单门资源':'Work',}},'MarkdowntoWord':'尚不支持',//q3},};写入后,转入写入函数:src/common/downLoadExcel.tsimportpuppeteerfrom'puppeteer';importpathfrom'path';importfsfrom'fs';exportconstdownLoadExcel=async(link:string):Promise
基于https://github.com/工作创建于LiangJunrong/document-library。
非本许可协议授权的使用权可从https://creativecommons.org/licenses/by-nc-sa/2.5/cn/获取。
