宝哥软件园

爬行动物武器木偶师实战

编辑:宝哥软件园 来源:互联网 时间:2021-08-27

木偶师介绍

木偶师翻译是木偶操纵者。有了这个工具,我们可以成为一个页面操纵器。木偶师是一个Nodejs库,它支持调用Chrome API来操纵Web。与Selenium或PhantomJs相比,它最大的特点是其操作Dom可以在内存中完全模拟,不需要打开浏览器就可以在V8引擎中进行处理,关键是由Chrome团队维护,会有更好的兼容性和前景。

木偶师使用

从网页生成PDF,用图片抓取SPA应用程序,并生成预渲染内容(即“SSR”服务器端渲染)。你可以从网站抓取内容,自动化表单提交,UI测试,键盘输入等。为了帮助您创建一个新的自动化测试环境(chrome),您可以直接在这里运行测试用例。6.捕捉网站的时间线,以便跟踪您的网站并帮助分析网站性能问题。

安装木偶师

由于网络关闭,直接下载Chromium会失败。您可以先停止下载Chromium,然后手动下载

#安装命令NPM I木偶-保存#错误消息错误:下载铬r515411失败!设置' puppet _ skip _ chromium _ download ' env变量跳过下载。#设置环境变量跳过下载chromium set puppet _ skip _ chromium _ download=1 #或者可以这样做。只下载模块不建NPM I-保存木偶师-忽略-脚本#成功安装模块【email protected】1.77s中增加了1个包手动下载Chromium,下载后解压压缩包,会有一个Chromium.app,放在你喜欢的目录中,比如/users/huqiyang/documents/project/z/Chromium/Chromium . app . Chromium . app会在。正常安装包后的局部铬

提示:下载Chromium失败的解决方案

替代国内铬源

木偶下载主机=https://storage.googleapis.com.cnpmjs.org NPM我木偶或安装它与cnpm

npminstall-gcnpm-registry=https://registry . NPM . Taobao . org CPM I木偶师点击查看木偶师API

第一次尝试木偶戏,剪个图

学习点

Puppeteer.launch启动浏览器实例browser.newPage()创建新的页面页面. goto进入指定的网页页面.截图Const Puppet=require(' Puppet ');(async()={ const browser=await(puppet。启动({//如果手动下载chromium,需要指定chromium地址。默认引用地址是/project目录/node _ modules/puppet/。local-Chromium/executableepath : '/users/huqiyang/documents/project/z/Chromium/Chromium . app/contents/macos/Chromium ',//设置超时timeout: 15000。//如果访问https页面,此属性将忽略https错误ignorettpsers: true。//打开开发者工具。当该值为真时,无头始终为假dev tools :为假。//关闭无头模式,不会打开浏览器headless : { false });const page=wait browser . NewPage();wait page . goto(' https://www . jianshu.com/u/40909 ea 33 e 50 ');Awaitpage .截图({ path: ' jianshu.png ',type:' png ',//quality: 100,仅对jpg有效,fullpage3360 true,//指定区域截图。只能为clip和fullPage设置一个//clip: {//x: 0,//y: 0,//width3360 1000,//height : 40//} });browser . close();})();运行结果

高级,获取网易云音乐的歌词和评论

网易云音乐的API采用AES和RSA算法加密,需要携带加密信息并通过POST请求才能获取数据。但是,木偶师出现后,就不重要了。只要显示在页面上,就可以通过木偶师获得元素。

学习点

页面类型获取输入框焦点并输入文字page.keyboard按模拟键盘按下某个按键,目前老兄上组合键无效为已知病菌页面。等待页面等待,可以是时间、某个元素、某个函数page.frames()获取当前页面所有的iframe,然后根据内联框架的名字精确获取某个想要的iframe iframe .$('.srchsongst’)获取内联框架中的某个元素iframe.evaluate()在浏览器中执行函数,相当于在控制台中执行函数,返回一个承诺数组将类数组对象转化为对象page.click()点击一个元素iframe .$eval()相当于在内联框架中运行document.queryselector获取指定元素,并将其作为第一个参数传递iframe .$$eval相当于在内联框架中运行document.querySelectorAll获取指定元素数组,并将其作为第一个参数传递const fs=require(' fs ');常数木偶师=require('木偶师');(async()={ const browser=await(puppet)。启动({可执行路径: '/Users/huqiyang/Documents/project/z/Chromium/Chromium。app/Contents/MacOS/Chromium ',无头: false });const page=等待浏览器。new page();//进入页面等待页面。goto(' https://音乐。163 .com/# ');//点击搜索框拟人输入鬼才会想起' const musicName='鬼才会想;wait page.type('.txt.j-flag ',musicName,{ delay : 0 });//回车等待页面。键盘。按('回车');//获取歌曲列表的iframe等待页面。等待(2000年);让iframe=await page.frames().find(f=f . name()===' ContentFrame ');const SONG _ LS _ SEQUER=等待iframe .$('.srchsongst’);//获取歌曲鬼才会想起的地址const selected Songhref=wait iframe。求值(e={ const SongList=Array。from(即子节点);const idx=SongList。FindIndex(v=v .子节点[1]。InnerText。替换(/ s/g ' ')==='鬼才会想起');返回歌曲列表.子节点[1]。第一个孩子。第一个孩子。第一个孩子。href},SONG _ LS _ SELECTOR);//进入歌曲页面等待页面。goto(所选Songhref);//获取歌曲页面嵌套的iframe等待页面。等待(2000年);iframe=await page.frames().find(f=f . name()===' ContentFrame ');//点击展开按钮const unfoldButton=等待iframe .$(' # flag _ ctrl ');等待打开按钮。单击();//获取歌词const LIRY _ SEQUER=等待iframe .$(' #歌词内容');const lyricCtn=等待iframe。求值(e={ return e . innertext},抒情_选择器);控制台。日志(lyricCtn);//截图等待页面。截图({ path: '歌曲. png ',fullPage: true,});//写入文件让writerStream=fs。createwriterstream(“”歌词. txt’);writerStream.write(lyricCtn,' UTF8 ');writerstream。end();//获取评论数量const commentCount=等待iframe .$ eval(' sub。s-fc3 ',e=e . inner text);控制台。日志(注释计数);//获取评论const commentList=等待iframe .$$eval ' .itm ',elements={ const ctn=elements。map(v={ return v . innertext。替换(/ s/g ' ');});返回ctn });控制台。日志(评论列表);})();运行结果

高级爬虫

爬取矿泉应用,并生成预渲染内容(即“SSR”服务端渲染),通俗讲就是在页面上显示的内容我们都能获取到。下面我们就通过爬取瓜子二手车直卖网的车辆信息来认识它。

首先通过爱可信来试试

const axios=require(' axios ');const usexios=()={ axios。get(' https://www。瓜齐。com/Hz/buy/').然后(((结果)={控制台。日志(结果。数据);})) .catch((err)={ console。log(err));});};结果它返回给我这个玩意,这显然不是我要的内容

通过操纵木偶的人爬取

const fs=require(' fs ');常数木偶师=require('木偶师');(async()={ const browser=await(puppet)。启动({可执行路径: '/Users/huqiyang/Documents/project/z/Chromium/Chromium。app/Contents/MacOS/chrome ',无头:真});const page=等待浏览器。new page();//进入页面等待页面。goto(' https://www .瓜齐。com/Hz/buy/');//获取页面标题让title=等待页面。title();console.log(标题);//获取汽车品牌const BRANDS _ INFO _ SEXER=' .DD-all。清除修复。js-brand。js-option-hid-info ';const brands=等待页面。求值(sel={ const ulList=array。自($(sel)).find(' ul Li p a ');const ctn=ullist。map(v={ return v . innertext。替换(/ s/g ' ');});返回ctn}、BRANDS _ INFO _ SEXER);console.log('汽车品牌' : ',JSON。stringify(品牌));让writerStream=fs。createwriterstream(' car _ brands。JSON’);writerstream。write(JSON。stringify(品牌,未定义,2),' UTF8 ';writerstream。end();//等待车身把手。dispose();//获取车源列表const CAR _ LIST _ SEQUER=' ul。“卡里斯特”;const Carlist=等待页面。计算((sel)={ const Catbox s=数组。自($(sel)).查找('阿利');const ctn=CatBoxs。地图(v={ const title=$(v)).查找(' h2.t ').text();const TItle=$(v).查找(' div.t-i ').文本()。拆分(' | ');返回{ title:书名,年份:字幕[0],里程计:字幕[1]};});返回ctn},CAR _ LIST _ SELECTOR);控制台。日志(` 0总共${carList.length}辆汽车数据: `, JSON.stringify(carList,undefined,2));//将车辆信息写入文件writerStream=fs。createwriterstream(' car _ info _ list。JSON’);writerstream。write(JSON。stringify(Carlist,undefined,2),“UTF8”);writerstream。end();浏览器。close();})();运行结果

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

更多资讯
游戏推荐
更多+