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