javascript – 在puppeteer中加载页面之前设置localstorage项目?

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

我该怎么做呢 ?

解决方法:

您必须注册localStorage项目,如下所示:

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

您应该在页面页面之后执行此操作.浏览器必须有一个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);
})();
上一篇:javascript – 与Puppeteer同时进行页面抓取


下一篇:javascript – 按类名收集元素,然后单击每个元素 – Puppeteer