利用python读取JS中的TOKEN。小白刚学,没有理解,没读不出来,望高手指点,谢谢!
报错:TypeError: 'window' 未定义
一、python程序
import execjs
_JS = execjs.compile(open("aa.js", "r", encoding='UTF-8').read()) # 初始化JS
token = _JS.call('loginByToken','callback')
print(token)
二、js文件
JS保存文件名aa.js.代码如下
function getCsrfToken(callback){
get('/token/csrf',{},function(json){
CSRF_NAME = json.data.csrf_name;
CSRF_TOKEN = json.data[CSRF_NAME];
if(typeof(callback) == 'function') callback();
})
}
function check_token(){
getCsrfToken(verify);
//检测是否有token
function verify(){
$.post('/token/verify',{token:TOKEN,csrf_token:CSRF_TOKEN},function(json){
json = $.parseJSON(json);
if(json[CSRF_NAME]) CSRF_TOKEN = json[CSRF_NAME];
if(json.code != 0){
loginByToken(function(){
hashChangeEvent();
})
}else{
hashChangeEvent();
}
})
}
}
function loginByToken(callback){
post('/main/auth/login',function(json){
if(json.code == 0){
TOKEN = json.data.token;
}else{
window.location = REDIRECT_LOGIN_URL;
return;
}
if(typeof(callback) == 'function') callback();
})
}
function post(url,parames,callback){
if(!CSRF_TOKEN){
getCsrfToken(function(){
post(url,parames,callback);
});
return;
}
if(typeof(parames) == 'string'){
parames += '&'+CSRF_NAME+'='+CSRF_TOKEN;
if(TOKEN) parames += '&token='+TOKEN;
}else if(typeof(parames) == 'object'){
parames[CSRF_NAME] = CSRF_TOKEN;
if(TOKEN) parames.token = TOKEN;
}else if(typeof(parames) == 'function'){
callback = parames;
parames = {};
parames[CSRF_NAME] = CSRF_TOKEN;
if(TOKEN) parames.token = TOKEN;
}else if(typeof(parames) == 'undefined'){
parames = {};
parames[CSRF_NAME] = CSRF_TOKEN;
if(TOKEN) parames.token = TOKEN;
}
CSRF_TOKEN = null;
$.post(url,parames,function(data){
var json = $.parseJSON(data);
if(json[CSRF_NAME]) CSRF_TOKEN = json[CSRF_NAME];
if(json.data && json.data.token) {
TOKEN = json.data.token;
localStorage.setItem('CJKT_MAIN_TOKEN',TOKEN);
}
if(json.code != 0){
if($('#loading').length>0) loading(false);
switch(parseInt(json.code)){
case 40001:
alert(json.msg);
break;
case 40003:
case 40004:
window.location = REDIRECT_LOGIN_URL;
break;
case 40005:
loginByToken(function(){
post(url,parames,callback);
})
break;
case 40006:
alert('权限不足');
break;
case 40007:
Page.go('index');
break;
case 40009:
//csrftoken错误
getCsrfToken(function(){
post(url,parames,callback);
});
return;
break;
}
}
if(typeof(callback) == 'function'){
callback(json);
}
});
}
window.alert = function(msg){
Toast.error(msg);
}
你的执行环境没有window对象
window对象是浏览器的内置对象 你需要模拟