JS渲染
通用抓取API是一个功能强大的网页内容检索服务,支持复杂的网页渲染和交互场景。
基本请求结构
{
"actor": "unlocker.webunlocker",
"input": {
"url": "https://example.com",
"js_render": false,
"headless": false
},
"proxy": {
"country": "US"
}
}
核心功能
JavaScript渲染
JavaScript渲染能够处理动态加载的内容和单页应用(SPA)。它启用完整的浏览器环境,支持更复杂的页面交互和渲染需求。
js_render=true
,我们将使用浏览器进行请求。
{
"actor": "unlocker.webunlocker",
"input": {
"url": "https://www.google.com/",
"js_render": true
},
"proxy": {
"country": "US"
}
}
JavaScript指令
提供了一套广泛的JavaScript指令,允许您动态地与网页交互。
这些指令使您可以点击元素、填写表单、提交表单或等待特定元素出现,从而为诸如点击“阅读更多”按钮或提交表单等任务提供灵活性。
{
"actor": "unlocker.webunlocker",
"input": {
"url": "https://example.com",
"js_render": true,
"js_instructions": [
{
"wait_for": [
".dynamic-content",
30000
]
// 等待元素
},
{
"click": [
"#load-more",
1000
]
// 点击元素
},
{
"fill": [
"#search-input",
"search term"
]
// 填写表单
},
{
"keyboard": [
"press",
"Enter"
]
// 模拟按键
},
{
"evaluate": "window.scrollTo(0, document.body.scrollHeight)"
// 执行自定义JS
}
]
}
}
以下是您可以使用JavaScript指令执行的一些常见操作:
JavaScript指令参考
指令 | 语法 | 描述 | 示例 |
---|---|---|---|
wait_for | [selector, timeout] | 等待元素出现 | {"wait_for": [".content", 30000]} |
click | [selector, delay] | 点击元素 | {"click": [".button", 1000]} |
fill | [selector, value] | 填写表单 | {"fill": ["#input", "text"]} |
wait | milliseconds | 固定等待时间 | {"wait": 2000} |
evaluate | javascript_code | 执行JS代码 | {"evaluate": "console.log('test')"} |
keyboard | [action, value, delay?] | 键盘操作 | 请参见下表键盘操作 |
键盘操作
操作 | 语法 | 描述 | 示例 |
---|---|---|---|
按键 | ["press", keyInput] | 按下特定的keyInput | {"keyboard": ["press", "Enter"]} |
输入文本 | ["type", text, delay?] | 输入文本,可选延迟 | {"keyboard": ["type", "Hello", 20]} |
按下按键 | ["down", key] | 按住一个键 | {"keyboard": ["down", "Shift"]} |
松开按键 | ["up", key] | 释放一个键 | {"keyboard": ["up", "Shift"]} |
支持的特殊KeyInput类型: https://pptr.dev/api/puppeteer.keyinput
资源控制
资源加载控制系统,用于优化性能和带宽使用。
{
"actor": "unlocker.webunlocker",
"input": {
"url": "https://example.com",
"js_render": true,
"block": {
"resources": [
"Image",
"Font",
"Stylesheet",
"Script"
],
"urls": [
// 可选,基于URL模式的阻塞
"*.analytics.com/*",
"*/ads/*"
]
}
}
}
完整的资源类型参考:
资源类型 | 描述 | 影响 |
---|---|---|
Document | 主文档和iframe | 核心页面内容 |
Stylesheet | CSS文件 | 页面样式和布局 |
Image | 图片和图标 | 可视化内容 |
Media | 音频和视频资源 | 多媒体内容 |
Font | 网络字体 | 文本渲染 |
Script | JavaScript文件 | 页面功能 |
TextTrack | 视频字幕和旁白 | 媒体辅助功能 |
XHR | XMLHttpRequest调用 | 传统异步请求 |
Fetch | Fetch API请求 | 现代异步请求 |
Prefetch | 预取资源 | 性能优化 |
EventSource | 服务器发送事件 | 实时更新 |
WebSocket | WebSocket连接 | 双向通信 |
Manifest | Web应用清单 | PWA配置 |
SignedExchange | 已签名的HTTP交换 | 内容真实性 |
Ping | Ping请求 | 分析和跟踪 |
CSPViolationReport | CSP违规报告 | 安全监控 |
Preflight | CORS预检请求 | 跨域安全 |
Other | 未分类资源 | 其他 |
使用示例:
{
"actor": "unlocker.webunlocker",
"input": {
"url": "https://example.com",
"js_render": true,
"block": {
"resources": [
"Image",
"Font",
"Stylesheet",
"Script",
"Media",
"Ping",
"Prefetch"
]
}
}
}
资源阻塞最佳实践:
-
性能优化
- 仅在必要时启用
js_render
- 明智地使用资源阻塞,阻止不必要的资源以加快加载速度
- 考虑阻止
Prefetch
和Ping
以减少网络使用 - 保持
Document
和关键Script
资源不被阻塞
- 仅在必要时启用
-
带宽管理
- 对于带宽密集型页面,阻止
Image
和Media
- 考虑阻止
Font
以使用系统字体
- 对于带宽密集型页面,阻止
-
稳定性增强
- 实现请求重试机制
- 添加错误处理逻辑
- 使用
wait_for
而不是固定的wait
-
资源效率
- 按需加载资源
- 及时关闭不必要的连接
**注意:**资源类型字符串区分大小写。请使用参考表中所示的精确匹配。