• Puppeteer实现自动登录


    Puppeteer是用JS对Chrome Dev Tools的实现,可以用来操作Chrome浏览器,适用于爬虫、自动化等领域。

    以下是自己实现自动化登录的代码(基于ES6)

    const puppeteer = require('puppeteer');
    const axios = require('axios');
    const config = require('./config');
    const loginurl = config.loginurl;
    const user = config.user;
    const headless = false;
    const rize = require('rize');
    
    var token;
    console.log(config);
    
    const browser = puppeteer.launch(
      {
        headless, executablePath: config.chromePath, args: ['--start-maximized', '--disable-infobars']
      }
    );
    
    
    async function login() {
    
      // 预先定义,在下面接受内层返回的brower对象
      // 待内部变量传出后,再给其赋值
      var _token;
    
      await browser.then(
          async browser => {
          const loginPage = await browser.newPage();
          var vfcode; 
          // 闭包,内部可访问外部的变量,之后将其传出
          var __token; 
          await loginPage.setViewport({0, height:0})
    
          await loginPage.on('requestfinished', request => {
            if (request.url().endsWith('Get_VerifyCode')){
              request.response().json().then(
                (result) => {  
                  vfcode = JSON.parse(result).data.verifyCode;
                })}});
        
          await loginPage.goto(loginurl);
          await loginPage.type('input[name="username"]', user[0]);
          await loginPage.type('input[name="password"]', user[1]);
          await loginPage.type('input[name="verificationCode"]', vfcode);
          await loginPage.click('span.mcenter.submitinner');
          await loginPage.on('requestfinished', request =>  {
               
              if(request.url().endsWith('Post_Authenticate')){
                request.response().json().then((result) => { 
                  __token = 'BasicAuth ' + JSON.parse(result).data.tokenID;
                });
              }
              
          // 在这里卡了很久,因为异步,内部赋值总是要晚于外面的代码,不得不加上等待,等待一会儿再返回token
          }).waitFor(500);
        // browser在其内部定义,须返回给上层
        // console.log('____, ' ,_token);
        return __token;
        }   
      ).then( (t) => {_token = t;});
      
      return _token
    }
    
    
    
    login().then(
      result => {
        token = result;
        registerProj();
      }
    );

      

  • 相关阅读:
    MATLAB——sigmoid传递函数
    MATLAB——BP神经网络
    MATLAB——神经网络构造线性层函数linearlayer
    MATLAB——线性神经网络
    MTALAB——神经网络mae()、mse()、sse()
    详解 Java 中的三种代理模式!
    HTTP 无状态中的状态到底指的是什么?
    单例模式的 8 种写法,整理非常全!
    数据库连接池到底应该设多大?
    Spring 框架用到的 9 个设计模式汇总!
  • 原文地址:https://www.cnblogs.com/yifeixu/p/11342905.html
Copyright © 2020-2023  润新知