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({width: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();
  }
);

 

  

转载于:https://www.cnblogs.com/yifeixu/p/11342905.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值