在 puppeteer 中加载页面之前设置本地存储项目?

新手上路,请多包涵

如果您没有设置 JWT_TOKEN,我们有一些路由逻辑可以将您踢到主页…我想在页面加载之前/调用 js 之前设置它。

我该怎么做呢 ?

原文由 christoffee 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
1 个回答

您必须像这样注册 localStorage 项目:

 await page.evaluate(() => {
  localStorage.setItem('token', 'example-token');
});

您应该在页面 page.goto 之后执行此操作 - 浏览器必须有一个 url 才能在其上注册本地存储项目。在此之后,再次进入同一页面,这次令牌应该在页面加载之前就在这里。

这是一个完整的示例:

 const puppeteer = require('puppeteer');
const http = require('http');

const html = `
<html>
  <body>
    <div id="element"></div>

    <script>
      document.getElementById('element').innerHTML =
        localStorage.getItem('token') ? 'signed' : 'not signed';
    </script>
  </body>
</html>`;

http
  .createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/html' });
    res.write(html);
    res.end();
  })
  .listen(8080);

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  await page.goto('http://localhost:8080/');

  await page.evaluate(() => {
    localStorage.setItem('token', 'example-token');
  });

  await page.goto('http://localhost:8080/');

  const text = await page.evaluate(
    () => document.querySelector('#element').textContent
  );

  console.log(text);
  await browser.close();

  process.exit(0);
})();

原文由 Everettss 发布,翻译遵循 CC BY-SA 4.0 许可协议

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