安装依赖库
pip install execjs
js执行环境中相关的浏览器对象 document或window 添加
npm install jsdom --save
生成浏览器对象 document 和 window
const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
window = dom.window;
document = window.document;
XMLHttpRequest = window.XMLHttpRequest;
location = new Object();
function cookie_gen(){
return ('_')+('_')+('j')+('s')+('l')+('_')+('c')+('l')+('e')+('a')+('r')+('a')+('n')+('c')+('e')+('_')+('s')+('=')+(-~{}+'')+([2]*(3)+'')+(1+3+'')+(3+'')+(~~[]+'')+(7+'')+(2+2+'')+(3+'')+(1+7+'')+((+false)+'')+('.')+(-~[]+'')+(3+6+'')+(6+'')+('|')+('-')+((+true)+'')+('|')+('s')+('p')+('A')+('I')+('Q')+(4+4+'')+('Z')+('F')+('z')+('u')+(-~1+'')+('S')+('a')+('h')+(2+5+'')+(3+6+'')+('s')+('p')+('N')+('Q')+('a')+('z')+('G')+(-~[2]+'')+((1+[4]>>1)+'')+('b')+('E')+('%')+((2^1)+'')+('D')+(';');
}
调用js方法
with open("test.js", "r", encoding="UTF-8") as f:
js_str = f.read()
print(js_str)
cookie_str = execjs.compile(js_str, cwd="node_modules").call("cookie_gen")
print(cookie_str)
伪造浏览器对象, 这种可以不用安装jsdom, 但是功能也有限
window = new Object();
document=new Object();
location = new Object();
window.navigator=new Object();
window.navigator.userAgent="'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'";
result="";
function cookie_gen(){
return %s;
}
调用js方法
with open("test.js", "r", encoding="UTF-8") as f:
js_str = f.read()
cookie_str = execjs.compile(js_str).call("cookie_gen")
更改js自带方法, 用于解决一些类似setTimeout之类的反爬机制
setTimeout=function(f, i){
f();
}
打印结果
__jsl_clearance_s=1643074380.196|-1|spAIQ8ZFzu2Sah79spNQazG37bE%3D;