Node环境下如何模拟浏览器下的document.cookie赋值?

当在浏览器下执行以下两句代码

document.cookie="a=1";

document.cookie="b=2";

console.log(document.cookie) //输出 a=1; b=2

复制代码
而在Node下执行以下语句

document={cookie:""};
document.cookie="a=1";
document.cookie="b=2";
console.log(document.cookie) //输出b=2

复制代码
这是为什么,为什么浏览器下对document.cookie赋值,不会覆盖掉旧的值?

怎么样才能让node下,也达到相同的效果.

问题来源于我对某网站做的爬虫.该网站每次打开都会混淆JS代码.在JS代码中的多处地方,对document.cookie进行了赋值
而我打算把该JS搬到Node下执行,Node下本身没有document对象.就直接初始化一个,却发现在赋值上有了此问题.

阅读 2.8k
1 个回答

node环境没有 document 所以你声明的 document 对象只是一个普通对象
可以尝试一下这个

function Document() {
    let cookie = ""
    Object.defineProperty(this, 'cookie', {
        get: function () {
            return cookie;
        },
        set: (a) => {
            cookie === "" ? cookie = a : cookie += `;${a}`
        }
    })
}
let document = new Document()

document.cookie = "a=1"
document.cookie = "b=2"

console.log(document.cookie)

不过我们这边爬虫如果遇到这种混淆比较复杂的情况,一般都用 headless 了~~可以参考一下

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题