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/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2022-05-18 openresty 1.21.4 发布了
2021-05-18 cube.js 响应内容压缩
2020-05-18 HAProxy Data Plane API 2.0 docker 镜像
2020-05-18 使用jetty runner 运行war 包
2020-05-18 winstone 简单方便的servlet 容器
2020-05-18 Announcing HAProxy Data Plane API 2.0
2019-05-18 使用go-mysql-server 开发自己的mysql server