摘要:python爬虫伪造浏览器环境

nodejs环境中没有window等对象,有时候网站采用前端加密,必须从网站前端抠出前端加密过的代码,在nodejs中模拟浏览器运行时往往会出现缺少对象问题,采用jsdom可以很方便模拟浏览器中js的各种对象。

代码如下:


const jsdom = require("jsdom");
const {JSDOM } = jsdom; //在jsdom中导出JSDOM对象
const { window } = new JSDOM('<!doctype html><html><body></body></html>'); //导出JSDOM中的window对象
global.window = window; //将window对象设置为nodejs中全局对象;

或者


const jsdom = require("jsdom");
const {JSDOM } = jsdom; //在jsdom中导出JSDOM对象
const {document} = (new JSDOM('<!doctype html><html><body></body></html>')).window; //导出JSDOM中window对象的doucument对象
global.document = document; //将doucument对象设置为nodejs中全局对象
const window = document.defaultView; //将document对象中的的defaultView属性(doucument.defaultView也就是浏览器中的window对象)

tips:

//nodejs中允许下面这种写法,const a为块级作用域,global.a为全局作用域,javascript先寻找块级作用域,在寻找全局作用域。
function aa()
{
    const a = 1;
    global.a = 2;
    console.log(a);
}
aa()
console.log(a);

运行结果:
1
2