首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Puppeteer从localStorage获取所有值

使用Puppeteer从localStorage获取所有值
EN

Stack Overflow用户
提问于 2019-01-24 23:49:34
回答 1查看 1.8K关注 0票数 1

是否可以使用Puppeteer从localStorage获取所有值?包括来自第三方域名的值(假设我不知道所有第三方域名)。

我正在寻找与此类似的东西,它从浏览器获得所有的cookies (但用于localStorage)。

代码语言:javascript
运行
复制
export const getCookies = async page => {
  const { cookies } = await page._client.send("Network.getAllCookies", {});

  return cookies;
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-25 05:47:25

然而,如果我们假设localStorage起源=帧,我们可以通过这两种方法中的任何一种来获得数据:

代码语言:javascript
运行
复制
'use strict';

const puppeteer = require('puppeteer');

(async function main() {
  try {
    const browser = await puppeteer.launch({ headless: false });
    const [page] = await browser.pages();

    await page.goto('https://example.org/');


    await page.evaluate(() => {
      document.body.appendChild(document.createElement('iframe')).src = 'https://example.net/';
      document.body.appendChild(document.createElement('iframe')).src = 'https://example.com/';
    });

    for (const frame of page.frames()) {
      await frame.waitForSelector('head > title');
      await frame.evaluate(() => {
        localStorage.setItem('foo', document.location.href);
        localStorage.setItem('bar', document.title);
      });
    }

    const client = await page.target().createCDPSession();
    for (const frame of page.frames()) {
      const securityOrigin = new URL(frame.url()).origin;
      const response = await client.send(
        'DOMStorage.getDOMStorageItems',
        { storageId: { isLocalStorage: true, securityOrigin } },
      );
      console.log(response.entries);
    }

    console.log('----------');

    for (const frame of page.frames()) {
      const entries = await frame.evaluate(() => {
        const data = [];
        for (var i = 0; i < localStorage.length; i++) {
          const key = localStorage.key(i);
          data[i] = [key, localStorage.getItem(key)];
        }
        return data;
      });
      console.log(entries);
    }

    await browser.close();
  } catch (err) {
    console.error(err);
  }
})();
代码语言:javascript
运行
复制
[ [ 'foo', 'https://example.org/' ],
  [ 'bar', 'Example Domain' ] ]
[ [ 'foo', 'https://example.net/' ],
  [ 'bar', 'Example Domain' ] ]
[ [ 'foo', 'https://example.com/' ],
  [ 'bar', 'Example Domain' ] ]
----------
[ [ 'foo', 'https://example.org/' ],
  [ 'bar', 'Example Domain' ] ]
[ [ 'foo', 'https://example.net/' ],
  [ 'bar', 'Example Domain' ] ]
[ [ 'foo', 'https://example.com/' ],
  [ 'bar', 'Example Domain' ] ]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54350526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档