0
点赞
收藏
分享

微信扫一扫

python执行javascript代码

晴儿成长记 2022-01-27 阅读 46

文章目录

安装依赖库

#安装execjs
pip install execjs
#使用国内阿里云镜像安装 
#pip install execjs -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com

js执行环境中相关的浏览器对象 document或window 添加

#安装jsdom
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(); //或 =window.location;, 这种有时候会产生一些跳转异常发生

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;
举报

相关推荐

0 条评论