在 puppeteer 中加载页面之前设置本地存储项目? [英] Set localstorage items before page loads in puppeteer?

查看:245
本文介绍了在 puppeteer 中加载页面之前设置本地存储项目?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

We have some routing logic that kicks you to the homepage if you dont have a JWT_TOKEN set... I want to set this before the page loads/before the js is invoked.

我该怎么做?

推荐答案

你必须像这样注册localStorage项:

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

你应该在页面 page.goto 之后做 - 浏览器必须有一个 url 来注册本地存储项目.之后,再次进入同一个页面,这次令牌应该在页面加载之前就在这里.

You should do it after page page.goto - browser must have an url to register local storage item on it. After this, enter the same page once again, this time token should be here before the page is loaded.

这是一个完整的示例:

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);
})();

这篇关于在 puppeteer 中加载页面之前设置本地存储项目?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆