puppeteer localstorage 处理简单说明

puppeteer 对于cookie 以及localstorage 的控制实际上还是比较常见的需求,现在主流web 开发都比较喜欢使用localstorage 进行一些数据的额存储,以下是关于localstorage 处理的一个简单演示

环境准备

基于了browserless(使用了v2版本,注意browserless v1与v2 是有差异的,目前测试chrome的,chromium 的与v1 兼容比较好)

  • docker-compose
    一个browserless服务,一个基于nginx 的web server
version: "3"
services:
  nginx:
    image: nginx:alpine
    volumes:
      - ./index.html:/usr/share/nginx/html/index.html
    ports:
      - "80:80"
  browser:
    image: ghcr.io/browserless/chrome:latest
    ports:
      - "3000:3000"

测试

  • nginx index.html
    一个简单的静态文件,进行localstorage 操作
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>local storage teset</title>
     <script >
 
        function demo(){
            let local_name = localStorage.getItem("name");
            alert(local_name);
        }
 
     </script>
</head>
<body>
 
  <div> 
      <input type="button" value="set" id="set"  onclick="demo()"/>
  </div>
 
</body>
</html>
  • puppeteer 进行localstorage 操作
    app.js
const puppeteer = require("puppeteer-core");
(async () => {
  const browser = await puppeteer.connect({
    browserWSEndpoint: "ws://localhost:3000/chrome",
  });
  const page = await browser.newPage();
  await page.goto("http://nginx", { waitUntil: "networkidle2" });
// 通过page.evaluate进行localStorage 设置
  await page.evaluate(() => {
    localStorage.setItem("name", "demoapp");
  });
 // 通过page.evaluate进行localStorage 获取
  let info = await page.evaluate(() => {
    return localStorage.getItem("name");
  });
  console.log(info);
  await page.close();
  await browser.close();
})();

说明

以上是比较简单的测试,实际上目前通过对于v2版本browserless的测试,比v1是有不少性能的提升,整体处理处理快了不少(也可能是browserless内部浏览器版本的升级引起的)

参考资料

https://github.com/rongfengliang/puppeteer-localstorage-learning/tree/main
https://www.checklyhq.com/learn/headless/managing-cookies/

posted on 2024-05-18 22:19  荣锋亮  阅读(197)  评论(0编辑  收藏  举报

导航