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

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM