python执行javascript代码

本文介绍如何通过Python和Node.js搭建JavaScript执行环境,包括安装必要的依赖库如jsdom和execjs,生成及模拟浏览器对象document和window,以及修改JavaScript内置方法以应对反爬虫策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装依赖库

#安装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

//test.js
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方法

#python call js function
    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, 但是功能也有限

//test.js
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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值