Tangram 截图(二)

本文介绍如何使用Flash动画创建个性化的起始屏幕和工具箱界面,并嵌入到TangramMFC应用程序中。用户可以根据需求自定义背景,包括FlashMovie、图片、网页等元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2005年04月05日 08:47:00
Tangram MFC 应用程序基于Flash动画的Splash起始屏幕窗口:用户可以设计自己特征的Splash,然后作为程序资源嵌入到程序中。Tangram Designer的工具箱界面也是基于Flash动画实现的,如果用户愿意,可以设计自己的Designer Tool Box(用Flash、HTML、C++View或其他对象均可)
具有HTML背景的程序界面:同样,用户可以任意定制程序背景,可以是一个Flash Movie、一幅图片、个性网站、C++对象以及.NET对象等等,Tangram为您提供了方便的途径实现这一切!


Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=336674


<think>我们将在容器中部署n8n,并配置Puppeteer节点以实现模拟浏览器登录。以下是详细步骤: ### 1. 创建Dockerfile 创建自定义Dockerfile,安装Puppeteer所需依赖: ```dockerfile FROM n8nio/n8n:latest # 安装Puppeteer依赖(参考:https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md#chrome-headless-doesnt-launch-on-unix) RUN apt-get update && \ apt-get install -y \ gconf-service \ libasound2 \ libatk1.0-0 \ libatk-bridge2.0-0 \ libc6 \ libcairo2 \ libcups2 \ libdbus-1-3 \ libexpat1 \ libfontconfig1 \ libgcc1 \ libgconf-2-4 \ libgdk-pixbuf2.0-0 \ libglib2.0-0 \ libgtk-3-0 \ libnspr4 \ libpango-1.0-0 \ libpangocairo-1.0-0 \ libstdc++6 \ libx11-6 \ libx11-xcb1 \ libxcb1 \ libxcomposite1 \ libxcursor1 \ libxdamage1 \ libxext6 \ libxfixes3 \ libxi6 \ libxrandr2 \ libxrender1 \ libxss1 \ libxtst6 \ ca-certificates \ fonts-liberation \ libappindicator1 \ libnss3 \ lsb-release \ xdg-utils \ wget \ && rm -rf /var/lib/apt/lists/* # 安装n8n-puppeteer节点 RUN cd /usr/local/lib/node_modules/n8n && \ npm install n8n-nodes-puppeteer ``` ### 2. 构建自定义镜像 ```bash docker build -t n8n-puppeteer . ``` ### 3. 创建docker-compose.yml 配置容器运行参数: ```yaml version: '3' services: n8n: image: n8n-puppeteer environment: - N8N_BASIC_AUTH_ACTIVE=true - N8N_BASIC_AUTH_USER=<用户名> - N8N_BASIC_AUTH_PASSWORD=<密码> - PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium # 确保路径正确 ports: - "5678:5678" volumes: - ./.n8n:/home/node/.n8n # 持久化数据 # 以非root用户运行(Puppeteer要求) user: node ``` ### 4. 启动容器 ```bash docker-compose up -d ``` ### 5. 配置Puppeteer节点 在n8n工作流中: 1. 添加**Puppeteer**节点 2. 选择操作类型:"Open Browser" 或 "Page" 3. 配置参数: ```json { "headless": false, // 调试时可设为true "args": ["--no-sandbox", "--disable-setuid-sandbox"] // 容器中必须的沙盒参数 } ``` 4. 使用**Page**节点导航到登录页面: ```plaintext URL: https://passport.baidu.com/v2/?login ``` 5. 通过**Type**节点输入账号密码: ```json { "selector": "#TANGRAM__PSP_3__userName", "text": "{{ $env.BAIDU_USERNAME }}" } ``` 6. 类似地填写密码字段并点击登录按钮 ### 6. 处理验证码 - 使用**Screenshot**节点截取验证码区域 - 通过HTTP节点发送到OCR API - 将识别结果填入验证码输入框 ### 7. 保存登录状态 登录成功后: - 使用**Cookie**节点获取当前页面Cookie - 存储为n8n凭证供后续使用 ### 注意事项 1. **容器权限** 在docker-compose中必须设置`user: node`并添加`--no-sandbox`参数,否则Puppeteer无法在容器中启动[^1]。 2. **资源消耗** 每个Puppeteer节点会启动一个Chromium实例,建议: - 设置`browser.close()`及时关闭浏览器 - 限制并发工作流数量 3. **验证码处理** 复杂验证码(如滑动验证)需额外步骤: - 使用**Mouse**节点模拟拖动 - 集成第三方打码平台API 4. **环境变量** 敏感数据通过n8n的`$env`变量管理,避免硬编码: ```plaintext BAIDU_USERNAME=your_username BAIDU_PASSWORD=your_password ``` ### 完整工作流示例 ```plaintext Start → Puppeteer (Open Browser) → Page (Goto Login) → Type (输入账号) → Type (输入密码) → Screenshot (验证码区域) → HTTP (OCR识别) → Type (输入验证码) → Click (登录按钮) → Cookie (保存会话) → End ``` §§相关问题§§ 1. 如何在n8n中安全地存储环境变量? 2. Puppeteer节点支持哪些浏览器操作? 3. 容器中运行Puppeteer常见错误有哪些? 4. 如何优化Puppeteer节点的性能? 5. n8n工作流如何实现定时触发登录操作? [^1]: 参考官方Puppeteer容器部署指南:https://pptr.dev/troubleshooting#running-puppeteer-in-docker</think>### 在容器中部署n8n并配置Puppeteer节点的完整指南 #### 一、容器化部署步骤 1. **创建Dockerfile** ```dockerfile FROM n8nio/n8n:1.18.2 # 安装Puppeteer依赖(Chromium所需系统库) RUN apt-get update && \ apt-get install -y \ gconf-service \ libasound2 \ libatk1.0-0 \ libatk-bridge2.0-0 \ libc6 \ libcairo2 \ libcups2 \ libdbus-1-3 \ libexpat1 \ libfontconfig1 \ libgcc1 \ libgconf-2-4 \ libgdk-pixbuf2.0-0 \ libglib2.0-0 \ libgtk-3-0 \ libnspr4 \ libpango-1.0-0 \ libpangocairo-1.0-0 \ libstdc++6 \ libx11-6 \ libx11-xcb1 \ libxcb1 \ libxcomposite1 \ libxcursor1 \ libxdamage1 \ libxext6 \ libxfixes3 \ libxi6 \ libxrandr2 \ libxrender1 \ libxss1 \ libxtst6 \ ca-certificates \ fonts-liberation \ libappindicator1 \ libnss3 \ lsb-release \ xdg-utils \ wget # 安装Puppeteer节点 RUN cd /usr/local/lib/node_modules/n8n && \ npm install n8n-nodes-puppeteer ``` 2. **构建自定义镜像** ```bash docker build -t n8n-puppeteer . ``` 3. **创建docker-compose.yml** ```yaml version: '3' services: n8n: image: n8n-puppeteer environment: - N8N_BASIC_AUTH_ACTIVE=true - N8N_BASIC_AUTH_USER=<用户名> - N8N_BASIC_AUTH_PASSWORD=<密码> - PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser # 关键路径 ports: - "5678:5678" volumes: - ./.n8n:/home/node/.n8n # 持久化数据 # 必须使用非root用户运行(Puppeteer安全限制) user: node # 容器中必须的沙盒参数 command: ["--no-sandbox", "--disable-setuid-sandbox"] ``` 4. **启动容器** ```bash docker-compose up -d ``` #### 、配置Puppeteer节点模拟登录 1. **创建工作流** - 添加 **Puppeteer** 节点 → 选择 "Open Browser" 操作 ```json { "headless": false, // 调试时设为true "args": [ "--window-size=1920,1080", "--no-sandbox", "--disable-setuid-sandbox" ] } ``` 2. **导航到登录页面** - 添加 **Page** 节点 → Goto操作 ```plaintext URL: https://passport.baidu.com/v2/?login ``` 3. **输入账号密码** - 添加 **Type** 节点 ```json // 百度用户名输入框 { "selector": "#TANGRAM__PSP_3__userName", "text": "{{ $env.BAIDU_USERNAME }}" } ``` 4. **处理验证码** ```javascript // 在Function节点中添加验证码处理逻辑 const { page } = $input; await page.waitForSelector('#captcha_image'); const captcha = await page.$('#captcha_image'); const screenshot = await captcha.screenshot({ encoding: 'base64' }); return { screenshot }; ``` - 将截图发送给第三方OCR服务解析 5. **点击登录按钮** ```json { "selector": "#TANGRAM__PSP_3__submit", "clickCount": 1 } ``` 6. **保存会话Cookie** ```javascript // 在Function节点中获取cookie const cookies = await page.cookies(); $item.json.cookies = cookies; // 存储到工作流数据 ``` #### 三、关键配置注意事项 1. **容器权限问题** - 必须添加`--no-sandbox`和`--disable-setuid-sandbox`参数 - 必须使用非root用户运行(Dockerfile中的`user: node`) 2. **资源优化** ```yaml # docker-compose.yml中添加 deploy: resources: limits: memory: 2G ``` - 每个Puppeteer实例消耗 ~300MB 内存 3. **验证码处理方案** | 方案类型 | 推荐服务 | 集成方式 | |----------------|-------------------|-------------------| | OCR识别 | Tesseract.js | Docker多阶段构建 | | 行为验证 | 2Captcha API | HTTP请求节点 | | 人工打码 | 浏览器远程调试 | DevTools协议 | 4. **登录状态持久化** ```javascript // 后续请求携带cookie const cookies = $input.json().cookies; await page.setCookie(...cookies); ``` #### 四、调试技巧 1. **查看浏览器界面** ```bash docker exec -it <容器ID> bash apt-get install xvfb -y xvfb-run --server-args="-screen 0 1024x768x24" n8n ``` 通过VNC连接查看浏览器界面 2. **日志监控** ```bash docker logs -f <容器ID> | grep puppeteer ``` 3. **错误处理** ```javascript // Function节点中添加错误重试 try { await page.click('#submit'); } catch (error) { await page.reload(); // 重试逻辑 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值