通用抓取API功能JS Render

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"]}
waitmilliseconds固定等待时间{"wait": 2000}
evaluatejavascript_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核心页面内容
StylesheetCSS文件页面样式和布局
Image图片和图标可视化内容
Media音频和视频资源多媒体内容
Font网络字体文本渲染
ScriptJavaScript文件页面功能
TextTrack视频字幕和旁白媒体辅助功能
XHRXMLHttpRequest调用传统异步请求
FetchFetch API请求现代异步请求
Prefetch预取资源性能优化
EventSource服务器发送事件实时更新
WebSocketWebSocket连接双向通信
ManifestWeb应用清单PWA配置
SignedExchange已签名的HTTP交换内容真实性
PingPing请求分析和跟踪
CSPViolationReportCSP违规报告安全监控
PreflightCORS预检请求跨域安全
Other未分类资源其他

使用示例:

{
  "actor": "unlocker.webunlocker",
  "input": {
    "url": "https://example.com",
    "js_render": true,
    "block": {
      "resources": [
        "Image",
        "Font",
        "Stylesheet",
        "Script",
        "Media",
        "Ping",
        "Prefetch"
      ]
    }
  }
}

资源阻塞最佳实践:

  1. 性能优化

    • 仅在必要时启用js_render
    • 明智地使用资源阻塞,阻止不必要的资源以加快加载速度
    • 考虑阻止PrefetchPing以减少网络使用
    • 保持Document和关键Script资源不被阻塞
  2. 带宽管理

    • 对于带宽密集型页面,阻止ImageMedia
    • 考虑阻止Font以使用系统字体
  3. 稳定性增强

    • 实现请求重试机制
    • 添加错误处理逻辑
    • 使用wait_for而不是固定的wait
  4. 资源效率

    • 按需加载资源
    • 及时关闭不必要的连接

**注意:**资源类型字符串区分大小写。请使用参考表中所示的精确匹配。