Spaces:
Running
Running
网站截图服务
这是一个使用 FastAPI 和 Playwright 构建的简单网站截图服务,可以生成任何网页的高质量截图。
功能特点
- 支持任何公开可访问的网页截图
- 可自定义截图尺寸
- 支持 PNG 格式输出
- 自动缓存生成的截图
- 提供 REST API 接口
- 异步处理,高性能
系统要求
- Python 3.9 或更高版本
- pip 包管理器
安装步骤
克隆或下载本项目
安装依赖
pip install -r requirements.txt
playwright install chromium
- 启动服务
python screenshot_service.py
服务将在 http://localhost:7860
启动。
API 使用说明
生成网页截图
请求:
POST /capture
Content-Type: application/json
请求体:
{
"url": "https://example.com",
"width": 1024,
"height": 768,
"format": "png",
"custom_headers": {
"User-Agent": "Custom User Agent"
}
}
参数说明:
url
: 必填,要截图的网页地址width
: 可选,截图宽度,默认 1024height
: 可选,截图高度,默认 768format
: 可选,图片格式,目前支持 png,默认为 pngcustom_headers
: 可选,自定义请求头
成功响应:
{
"success": true,
"imageUrl": "http://localhost:7860/screenshots/example_com_1633456789.png",
"filename": "example_com_1633456789.png"
}
错误响应:
{
"detail": "截图生成失败: 导航超时,网页加载时间过长"
}
检查服务健康状态
请求:
GET /health
响应:
{
"status": "ok"
}
在你的应用中使用
在客户端 JavaScript 中调用服务:
async function getScreenshot(url) {
try {
const response = await fetch('http://localhost:7860/capture', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
url: url,
width: 1024,
height: 768
})
});
const data = await response.json();
return data.imageUrl;
} catch (error) {
console.error('截图服务请求失败:', error);
return null;
}
}
在 Python 中调用服务:
import requests
def get_screenshot(url):
try:
response = requests.post(
'http://localhost:7860/capture',
json={
'url': url,
'width': 1024,
'height': 768
}
)
data = response.json()
return data['imageUrl']
except Exception as e:
print(f'截图服务请求失败: {str(e)}')
return None
部署建议
在生产环境部署时,建议:
- 使用 Docker 容器化部署
- 使用 Gunicorn 或 Uvicorn 作为生产级 ASGI 服务器
- 设置合适的超时时间和内存限制
- 配置 HTTPS 以保证安全性
- 添加访问限制或身份验证
Docker 部署
- 构建镜像
docker build -t screenshot-service .
- 运行容器
docker run -p 7860:7860 screenshot-service
许可证
MIT