利用python读取前端JS中的TOKEN。报错:TypeError: 'window' 未定义,请教!

利用python读取前端JS中的TOKEN。报错:TypeError: 'window' 未定义,请教!

利用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对象是浏览器的内置对象 你需要模拟


回答:

更改代码如下,还是报错
import execjs
from selenium import webdriver

browser = webdriver.Chrome(executable_path='chromedriver.exe')
_JS = execjs.compile(open("aa.js", "r", encoding='UTF-8').read()) # 初始化JS
print(browser.execute_script(_JS))
token = browser.call('loginByToken','callback')

后面TOKEN还没有运行到,就报错.

报错:TypeError: Object of type 'Context' is not JSON serializable

以上是 利用python读取前端JS中的TOKEN。报错:TypeError: 'window' 未定义,请教! 的全部内容, 来源链接: utcz.com/a/163350.html

回到顶部