nodejs之nightmare的使用--网络爬虫---论坛灌水
2018-01-17 22:53
375 查看
参考:https://www.cnblogs.com/xiaxuexiaoab/p/7297509.html
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;
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;
相关文章推荐
- 网络爬虫,使用NodeJs抓取RSS新闻
- [置顶] 使用java 实现网络爬虫 demo
- 网络爬虫十一-使用base64传输二进制数据
- 网络爬虫Heritrix1.14.4在MyEclipse中的安装配置与使用教程
- 在python3中使用urllib.request编写简单的网络爬虫
- 一个使用 asyncio 协程的网络爬虫(一)
- 使用python编写简单网络爬虫(一)
- 关于使用Java实现的简单网络爬虫Demo
- python3实现网络爬虫(7)-- 使用ip代理抓取网页
- iOS—网络实用技术OC篇&网络爬虫-使用java语言抓取网络数据
- 使用Python写的第一个网络爬虫程序
- 世界网络奇观!QQ论坛被可能都是“枪手”的人疯狂灌水
- python网络应用入门:网络爬虫的使用
- Linux企业级项目实践之网络爬虫(14)——使用正则表达式抽取HTML正文和URL
- node.js使用cheerio制作网络爬虫
- 用python写网络爬虫-使用xpath代替正则表达式
- 使用nodejs 爬虫框架 Crawler爬取全国省市区的数据
- 使用HttpClient实现网络爬虫 1
- 【使用JSOUP实现网络爬虫】解析一个HTML字符串
- 网络爬虫---HTMLParser使用详解