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

      

  • 相关阅读:
    P1939 矩阵加速(数列)
    P3390 矩阵快速幂
    快速幂
    1236:区间合并
    1183:病人排队
    1230:寻找平面上的极大点
    1244:和为给定数
    1228 书架
    1222 放苹果
    洛谷5015标题统计
  • 原文地址:https://www.cnblogs.com/yifeixu/p/11342905.html
Copyright © 2011-2022 走看看