Puppeteer通过evaluate执行脚本获取cookie

1 应用背景

通常我们希望在页面加载一些脚本然后获取脚本生成的cookie。这里考虑使用page.setContent方法,其中script标签内部包含设置cookie的代码。最后通过执行document.cookie来获取cookie。

(async () => {

    const browser = await puppeteer.launch({
        "executablePath": "路径",
        "headless": false
    });

        try {
            let page = await browser.newPage();
            await page.setContent("<script>...</script>")
            let cookie = await page.evaluate(() => document.cookie);
            console.log("cookie :" + cookie);
        } catch (e) {
            console.log(e);
        } finally{
            await browser.close();
        }
})();

2 产生的问题与解决方式

按1中设想方式,最终会产生如下错误。

Error: Evaluation failed: DOMException: Failed to read the 'cookie' property from 'Document': Access is denied for this document.
    at __puppeteer_evaluation_script__:1:17
    at __puppeteer_evaluation_script__:1:17
    at ExecutionContext.evaluateHandle 

由于使用访问页面后再获取执行document.cookie可以正常调用,因此变通方法可以通过增加goto调用 page.goto(“https://www.baidu.com/”); 跳转到某个页面后再次获取即可。

(async () => {

    const browser = await puppeteer.launch({
        "executablePath": "/Users/Hello/Documents/chrome-mac/Chromium.app/Contents/MacOS/Chromium",
        "headless": false
    });

        try {
            let page = await browser.newPage();
            await page.goto("https://www.baidu.com/");
            await page.setContent("<script>...</script>")
            let cookie = await page.evaluate(() => document.cookie);
            console.log("cookie :" + cookie);
        } catch (e) {
            console.log(e);
        } finally{
            await browser.close();
        }
})();
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值