首页 > 其他分享 >puppeteer exposeFunction 方法简单试用

puppeteer exposeFunction 方法简单试用

时间:2024-06-22 09:02:56浏览次数:3  
标签:const name await puppeteer 试用 exposeFunction page

以下简单演示下puppeteer exposeFunction 的使用

环境准备

基于browserless

  • docker-compose
version: "3"
services:
  nginx:
    image: nginx:alpine
    volumes:
      - ./index.html:/usr/share/nginx/html/index.html
    ports:
      - "80:80"
  browser:
    image: ghcr.io/browserless/chromium:latest
    environment:
      - CONCURRENT=40
      - QUEUED=20
      - CORS=true
      - CORS_MAX_AGE=300
      - DATA_DIR=/tmp/my-profile
      - TOKEN=6R0W53R135510
    volumes:
      - ./my-profile:/tmp/my-profile
    ports:
      - "3000:3000"

app.js

const puppeteer = require("puppeteer-core");
const crypto = require("crypto");
const hashids = require("hashids");
const Sqids = require("sqids").default;
 
const myid = new hashids("myapp", 10);
 
const mynewid = new Sqids({minLength: 10});
 
(async () => {
  const browser = await puppeteer.connect({
    browserWSEndpoint: "ws://localhost:3000/",
  });
  const page = await browser.newPage();
  await page.exposeFunction("idgen", (text) => {
    return {
      text: text,
      id: myid.encode(1, 2, 3),
      idv2: mynewid.encode([1,3,4]),
      md5: crypto.createHash("md5").update(text).digest("hex"),
    };
  });
 
  page.setUserAgent(
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
  );
  await page.goto("http://nginx", { waitUntil: "networkidle2" });
  await page.evaluate(() => {
    localStorage.setItem("name", "demoapp");
  });
 
  let info = await page.evaluate(async () => {
    let name = localStorage.getItem("name");
    let ids = await window.idgen(name);
    console.log(ids);
    return { name, ids };
  });
  console.log(info);
  await page.close();
  await browser.close();
})();

效果

说明

注意puppeteer exposeFunction 并不是可以将任何nodejs 模块以及方法暴露到浏览器中的,有一些限制,内部实际上会有序列化处理,对于简单对象是没有问题的,推荐基于简单对象模式进行参数传递

参考资料

https://sqids.org/javascript
https://playwright.dev/
https://pptr.dev/api/puppeteer.page.exposefunction
https://stackoverflow.com/questions/48281130/why-cant-i-access-window-in-an-exposefunction-function-with-puppeteer

标签:const,name,await,puppeteer,试用,exposeFunction,page
From: https://www.cnblogs.com/rongfengliang/p/18201133

相关文章

  • 测试:设计测试用例
    文章目录概念设计正交法判定表法本篇总结的是测试用例的概念和设计方法概念测试用例是为了实施测试而向被测试的系统提供的一组集合,这个集合中包含的内容有测试环境,操作步骤,测试数据,预期结果等要素在测试用例的设计中,一个原则是,测试用例要对于预期的结果做出定义,......
  • 关于热电偶实际测试用法,知其所以然
    热电偶是对系统、多氯联苯和单个部件进行热表征时常用的工具。它们很受欢迎是因为它们价格便宜,而且相对容易使用。尽管热电偶看起来很简单,但必须注意如何使用它们,因为就像任何其他传感器一样,准确读数的关键在于如何设置和校准它们。热电偶操作的基本原理是:在某些不同金属的两......
  • Rust中 测试用例编写
    //注定会断言失败的代码:断言1和2会不会相等#[cfg(test)]modtests{usesuper::*;#[test]fnone_result(){assert_eq!(1,2);}}注意点 1.编程环境:vscode+rust-analyzer(插件式)2.方法上添加标签(Attribute):#[cfg(test)]3.断言语句:asser......
  • NoSQLBooster for MongoDB延长-试用期
    mongo的客户端较少,其中NosqlBoosterForMongo算是一个不错的客户端软件,但是他也不是免费的,试用期只有30天。好在这个软件是基于nodejs的。所以我们可以利用npm对这个应用进行解包串改源码,将源码中设置试用期的参数改成足够大,然后再封包,这样我们就能不断的白嫖了。      ......
  • 如何免费试用阿里云的视频画质增强服务50元额度
    上文有说到阿里云有画质增强的服务,我也试了,确实画质提升不少。本文讲解如何免费试用视频画质增强服务。首先我们得有一个阿里云的账号,大家自行注册:https://www.aliyun.com/ 注册好后我们打开阿里云的视频生产工作台,点击开通:https://vision.console.aliyun.com/cn-shangha......
  • 【5】测试用例
    【一】基本术语【1】术语一:(1)动态测试:通过运行软件的组件或系统来测试软件==》需要不断地去运行系统来检测软件是否存在bug或缺陷。eg.运行抖音,腾讯课堂能否进入课堂等。(2)静态测试:对组件的规格说明书进行评审,对静态代码进行走查。》比如通过阅读等方式去检测软件是否存在bug......
  • 视频生成模型 Dream Machine 开放试用;微软将停止 Copilot GPTs丨 RTE 开发者日报 Vol.
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编......
  • 正交法设计测试用例
    条件和结果过于多了,怎么办?使用正交法,也叫正交试验法或正交排列法,就是使用最小的测试过程集合获得最大的测试覆盖率。基于正交试验,正交试验是研究多因素、多水平的一种实验方法,它利用正交表来对实验进行设计,通过少数实验代替全面的实验。在一项实验中把影响试验结果的量称为试验......
  • 14款测试用例管理工具详解
    14款不错的测试用例管理工具对比:PingCode、TestRAIl、Xray、PractiTest、TricentisqTest、禅道(ZenTao)、Zephyr、Tapd、TestLink、TestCollab、Testin云测、云效(AlibabaCloudEffect)、TeavCloud、FitNesse。在软件开发过程中,测试用例管理工具的使用变得越来越重要。这些工具......
  • 空间转录组cell niche(流程试用版)
    作者,EvilGenius放假了,简单画画图。最近粉丝问的问题简直就是送命题,空间培训班要不要上,我细数了一下,如果从空间基础分析开始将讲,R,python版本,当然是更新后的code,包括所有的2024年更新的新方法,新的绘图方法,再加上HD、Xenium,文献解读,我初步排了一下课,没40节课根本上不完。即使......