这是一个基于 FastAPI 实现的一个支持网页操作、截图、发送请求和附近美食和购物的API,他对大模型提供服务,优势显著!
- ✅ 支持跨域访问
- ⚡️ 高性能,支持高并发
- 🔒 自动验证 URL 合法性
- 📸 返回 PNG 格式的截图
- 🖱️ 支持元素点击后截图
- 🖼️ 支持页面滚动后截图
- Python 3.9+
- Python-Pip
- Windows/Linux/MacOS
正在维护中...请勿使用
python install.py #自动安装配置
pip install -r requirements.txt
playwright install
playwright install chromium
GET /screenshot?url={encoded_url}
参数说明
参数 | 类型 | 必需 | 说明 |
---|---|---|---|
url | string | 是 | 需要截图的网页完整URL |
示例
curl "http://localhost:8000/screenshot?url=https%3A%2F%2Fexample.com" -o output.png
GET /screenshot_after_click?url={encoded_url}&text={element_text}
参数说明
参数 | 类型 | 必需 | 说明 |
---|---|---|---|
url | string | 是 | 目标网页URL |
text | string | 是 | 需要点击的页面元素文本内容 |
示例
curl "http://localhost:8000/screenshot_after_click?url=https%3A%2F%2Fexample.com&text=Sign%20In" -o clicked.png
GET /screenshot_after_scroll?url={encoded_url}&delta_y={pixels}
参数说明
参数 | 类型 | 必需 | 说明 |
---|---|---|---|
url | string | 是 | 目标网页URL |
delta_y | int | 是 | 垂直滚动像素值(正=向下) |
示例
curl "http://localhost:8000/screenshot_after_scroll?url=https%3A%2F%2Fexample.com&delta_y=800" -o scrolled.png
graph TD
A[客户端请求] --> B{参数验证}
B -->|失败| C[返回4xx错误]
B -->|成功| D[创建浏览器实例]
D --> E[执行操作:<br>1. 加载页面<br>2. 点击/滚动<br>3. 截图]
E --> F[返回PNG图片]
F --> G[浏览器UI]
状态码 | 说明 |
---|---|
400 | 无效的URL格式 |
404 | 未找到指定文本元素 |
408 | 页面加载超时 |
500 | 服务器内部错误 |
# main.py 中的关键配置
_semaphore = asyncio.Semaphore(10) # 并发控制
VIEWPORT = {"width": 1280, "height": 800} # 视口尺寸
TIMEOUT = 15000 # 页面加载超时(毫秒)
# 使用4个worker进程 + gzip压缩
uvicorn main:app --workers 4 \
--proxy-headers \
--host 0.0.0.0 \
--port 8000 \
--timeout-keep-alive 30
- 在
validate_url
函数中添加域名白名单:
ALLOWED_DOMAINS = {"example.com", "trusted-site.org"}
def validate_url(url: str) -> bool:
parsed = urlparse(url)
return parsed.netloc in ALLOWED_DOMAINS
- 多次滚动截取长页面:
# 分段截取长页面
for y in 0 1000 2000 3000; do
curl "http://localhost:8000/screenshot_after_scroll?url=...&delta_y=$y" -o "part_$y.png"
done
📌 注意:所有URL参数需要经过URL编码处理,建议使用
urllib.parse.quote
进行编码
- 实现发送请求的API
- 实现个别城市附近美食数据收集以及前后端联动