python网页截屏

项目有个需求是做分享图,第一时间想到的是网页截屏实现

以前是用wkhtmltoimage,但是1是得写原生html,css上又限制太多,为了一张图耗时一整天去调试

想弄个一劳永逸的方法,于是让GPT4帮我写了两个程序

首先是用的selenium库实现,但是有2个问题始终不好解决

  1. 我们需要整个页面截屏,页面如果过长它就只能截半屏(控制滚动条不是截上半就是截下半)
  2. vue写的页面,无法等到api请求就截屏了,这是最致命的伤

于是更换pyppeteer库. 这里有个坑,linux系统下,需要装pyppeteer2,用法一样但是它更支持linux系统

import asyncio
import sys
from pyppeteer import launch

url = sys.argv[1]
path = sys.argv[2]
async def screenshot(url):
    browser = await launch(headless=True, args=['--no-sandbox'])
    page = await browser.newPage()
    await page.goto(url, waitUntil='networkidle0')
    await page.screenshot({'path': path, 'fullPage': True})
    await browser.close()

asyncio.get_event_loop().run_until_complete(screenshot(url))

--no-sandbox是为了可以root用户执行,这点谨慎,上线时记得去掉

headless=True是无头模式,无图形化的系统必须加这个

await page.goto(url, waitUntil='networkidle0')  这个很重要!!他可以让你页面的api顺利的执行完并渲染页面后,再截屏.为了这一段代码我问了GPT好久才问出来,可能是我prompt功力还不够吧= =

至此有了初步程序,改一改符合上线规范就能用了

还有个坑一定注意,url不能是python脚本同级的页面.比如页面链接是www.exam.com/page,页面解析至/usr/local/html/page/index.html,然后python脚本在/usr/local/html目录,那怎么都会报错,这个也是坑拖了我很久才解决

希望各位少踩点坑

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值