nodejs之nightmare的使用--网络爬虫---论坛灌水
nightmare是PhantomJS的高级封装,让你能够实现浏览器自动化任务。PhantomJS 是一个基于WebKit的服务器端 JavaScript API。它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, Canvas, 和 SVG。PhantomJS可以用于页面自动化,网络监测,网页截屏,以及无界面测试等。下面再贴一段官网介绍。我们可以看到速度是phantomJs的两倍,这正是我们想要的。
==============nightmareRun.js const NightMare=require('nightmare'); const nightmare=NightMare({show:true}); var runHelp=require('runHelp'); const run=async()=>{ await.runHelp.runTimes(login,5,20000); } const login=async()=>{ await nightmare.goto('http://baidu.com');//跳转到http://baidu.com这个玩还在那 await nightmare.wait('#id');//引号填的是css中选择器之类的东西------wait这句话就是等到了某一个dom元素的出现 await nightmare.click('.form :nth-child(2)');//点击的是类选择器。form下面的第二个子元素 //Promise这个方法中那个先等到就返回会的值,then后面的git和node就是返回值,promise中的方法同时执行 const result=await.Promise.race({ nightmare.wait('#loginfield').then(()=>'git'), nightmare.wait('#ss').then(()=>'node') }) if(result==='node'){ return; } await nightmare.type('#loginfield','uname');//type是给dom元素输入值 await nightmare.type('#passfield','123'); await nightmare.click('#sub');//点击登录按钮 } ==============runHelp.js //循环调用函数,时间到了要么返回数据,要么抛出异常 const runTimes=async(func,times,timeout=20000){ for(let i=0;i<times;i++){ try{ return runTimeout(func(),timeout) }catch(e){ console.log(e.message); } } } const runTimeout=async(func,timmeout=20000){ return await.Promise.race({ func(), new Promise((resolve,reject)=>{ setTimeout(()=>{ reject(new Error('操作超时')) },timeout) }), }) } module.export=runTimes;
————————————————
版权声明:本文为CSDN博主「liyubao160」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011146511/article/details/79080093
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库