1. 程式人生 > >用Electron做一個網頁自動登入工具(如Alipay)

用Electron做一個網頁自動登入工具(如Alipay)

Electron的好處是可以使用webview載入本地或者遠端的web頁面,還可以控制與webview載入頁面的互動,比如注入javascript,返回資訊給主執行緒。

基本的做法是:

2.webview中載入dom-ready監聽:

webview.addEventListener('dom-ready', (e) => {
        if(webview.src.indexOf('consumeprod.alipay.com') === 8){ //判斷是否已經登入成功
            doAutoPay();
        }
        else{
          doAutoInputLoginInfo();
        }
      });

在doAutoInputLoginInfo函式中執行js,自動輸入登入資訊,並提交。

3.登入成功後,解析交易記錄頁面,提取交易資訊(交易號、交易內容、金額等),並返回給主執行緒。主執行緒獲取交易資訊後,與自己的伺服器互動,完成交易。

主執行緒監聽訊息:

const ipcMain =require('electron').ipcMain;
ipcMain.on('message',function(event, arg) {//監聽渲染程序傳送的message
        doRechargeRequest(event,arg);
});

function doRechargeRequest(event,param_str){
  var param_array=param_str.split(',');
  if(param_array.length!=4){
      event.sender.send('main-message','引數錯誤:'+param_str);
      return;
  }
  var ptime=param_array[0];
  var puid=param_array[1];
  var ptno=param_array[2];
  var pamount=param_array[3];
  var param='time='+encodeURIComponent(ptime)+'&uid='+encodeURIComponent(puid)+'&trade_no='+encodeURIComponent(ptno)+'&amount='+encodeURIComponent(pamount);
  const {net} = require('electron')
  const request = net.request('https://www.***.com/recharge?'+param);
  request.on('response', (response) => {
      //console.log('STATUS: '+response.statusCode)
      //console.log('HEADERS: '+JSON.stringify(response.headers))
      response.on('data', (chunk) => {
          event.sender.send('main-message',puid+' '+ptno+' '+pamount+' ---> '+chunk);
          //console.log(puid+' '+ptno+' '+pamount+' 結果:'+chunk)
      })
      response.on('end', () => {
          //console.log('No more data in response.')
      })
  })
  request.end()
}