服务器是 ARM 架构的。html 的主要内容是 echarts 。
1
tool2dx 59 天前
无头调用 chrome 的内置 api 截图功能,echarts 强依赖 js 运行期,又没办法直接解析文件的。
有个叫 devtools-protocol 协议,可以通过 websocket 发送控制命令,并下载 jpeg 截图。 |
2
wangbin526 59 天前 via Android 1
偶是用 go 动态生成 html 的 echart 然后转图片再插入 pdf ,用的是 docker 的 lampnick/doctron ,实测 arm 能用,一秒三五张连续转了几万张也没出问题
|
3
Gilfoylek 59 天前
刚做过类似功能 [chromedp]( https://pkg.go.dev/github.com/chromedp/chromedp) 我们用的是 golang 的包
|
4
money1991 59 天前
docker 里跑 Puppeteer ,它有转图片 api ,非常方便
|
5
PolarBears 59 天前
playwright
|
6
dudubaba 59 天前
一般都是 html 转 canvas 转图片,或者转 pdf 再拆分图片,都有现成的库吧。
|
7
xiaoriri666 59 天前
直接用 serverless ,阿里云直接部署个,就是冷启动有点慢,如果量不是很大可以用
|
8
yph007595 59 天前
python 之 selenium ,我现在就用这个定时发送图表
|
9
moxiaonai 59 天前
playwright, puppeteer 之类的,缺点是内存占用有点大,qps 大的话,服务容易崩
|
10
AlanBrian OP 因为程序使用的 python ,目前用的 pyppeteer 无头调用 chrome 生成图片。但是有个问题,在 https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html 下载 mac 和 Windows 对对应的 chrome 包,然后在对于系统代码运行都没问题,可以生成图片。但是下载 linux_x64 的包在 x64 服务器上运行就报错了(我是想先在 x64 架构的服务器运行测试通过再去尝试 ARM 架构的)。大佬知道是什么原因吗?
还有你说的这个“devtools-protocol 协议,可以通过 websocket 发送控制命令”哪里可以参考吗?感谢🙏 @tool2dx |
11
tool2dx 59 天前
@AlanBrian https://github.com/ChromeDevTools/awesome-chrome-devtools
我是抓页面数据没办法,要用到 websocket 的 devtools 协议。一般截图用 api 就够了,不用上这个协议的。 |
12
daxin945 59 天前
selenium + firefox 无头浏览器 部署在 arm 架构的国产化操作系统上跑过
|
13
horizon 59 天前
@wangbin526 #2
清晰度有问题没 |
14
kenilalexandra 59 天前
屏幕截图不行?
|
16
makerbi 59 天前
Python 的话 Playwright 就可以,我是和你完全一样的需求,需要渲染 ECharts 图表,部署在阿里云函数,每次调用平均用时 4 秒的样子。
|
17
daxin945 59 天前
|
18
s2555 59 天前
imgkit ,我上个帖子发的字帖生成就用这个,先生成 html ,再转成图片
|
20
Oldletter 59 天前
你的 arm 和 x64 还有问题呢(深度踩坑),应该 arm64 上的 pyppeteer 调用 chrome(开源的那个有问题),我之前写的是 pyppeteer 调用 firefox
Dockerfile ``` FROM node:16 # examples: https://github.com/puppeteer/puppeteer/blob/main/docker/Dockerfile RUN apt-get update \ && apt-get install -y wget gnupg firefox-esr fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-khmeros fonts-kacst fonts-freefont-ttf libxss1 ENV PUPPETEER_PRODUCT=firefox WORKDIR /home/app COPY ./package.json /home/app COPY ./firefox.js /home/app RUN npm install RUN mkdir screenshots CMD echo “Hello World” ``` 调用 ``` const puppeteer = require('puppeteer-core'); (async() => { const browser = await puppeteer.launch({ product: 'firefox', headless: true, executablePath: "/usr/bin/firefox", defaultViewport: { width: 1700, height: 800 }, args: [ ] }); const page = await browser.newPage(); await page.goto('https://www.baidu.com/'); console.log('saving baidu screenshot'); await page.screenshot({ path: 'screenshots/baidu.png', fullPage: true }); await browser.close(); })(); ``` 环境需要你自己搭建下 |
21
taoya7 59 天前
|
22
xcsoft 59 天前
go 的 chromeDP 也可以
|
24
mikewang 58 天前
以前用过 wkhtmltoimage ,不过现在看起来已经 archive 了
|
25
LuckyLauncher 58 天前
实际上你的需求是如何在服务器上运行 dom like 的 js
看上去是 html 其实是 echarts 渲染出来的 canvas/svg 按道理来讲只要实现了你用到的 js API 然后重新 echarts 的 render 函数是可以直接生成图片的 不过这种方案比较复杂,好处就是不像浏览器那样占资源 |
26
iv8d 58 天前
生成 pdf 然后截图试试??
|
27
Dongxiaohao 58 天前
我们用的 puppeteer 这个依赖,很好用。截图效果很好
|
28
Latin 58 天前
|
29
zhupeng 58 天前
自己用过 pyppeteer ,感觉还行,特别的页面会出问题。
|