zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Path Sum
    Binary Tree Level Order Traversal II
    Jump Game
    leedcode 刷题-V2
    (2016 年) githup 博客地址 : https://github.com/JMWY/MyBlog
    算法分类总结
    剑指 Offer 题目汇总索引
    LeedCde 题解目录
    趣味算法总目录
    常用
  • 原文地址:https://www.cnblogs.com/Im-Victor/p/15062597.html
Copyright © 2011-2022 走看看