JS 渲染与浏览器控制

了解如何使用 `render` 参数,以及如何在 网页爬虫API 中定义浏览器指令,以便抓取复杂的动态页面。

JavaScript 渲染

如果你想抓取的页面需要 JavaScript 才能将所有必要数据动态加载到 DOM 中,你可以在请求中包含一个 render 参数,而不必手动设置和使用自定义浏览器指令。包含此参数的请求将被完全渲染,数据将根据指定参数存储为 HTML 文件或 PNG 截图。

HTML

设置 render 参数来 html 即可获取渲染后页面的原始输出。

PNG(截图)

设置 render 参数来 png 即可获取渲染后页面的 Base64 编码截图。

如果你想抓取图片并下载,请参考 此部分.

请求示例

curl --user "user:pass" \
'https://realtime.oxylabs.io/v1/queries' \
-H "Content-Type: application/json" \
-d '{"source": "universal", "url": "https://www.example.com", "render": "html"}'

强制渲染特定页面

为了成功抓取,某些特定域名的页面类型由于其动态内容需要渲染。即使用户未明确设置,我们的系统也会自动对这些页面强制启用渲染。

我们希望用户在抓取以下页面时充分了解这一点:

这种方式提供尽可能好的抓取体验,确保这些高难度页面的数据准确性和可靠性。

如果你想禁用渲染,可以通过在请求中添加以下参数来实现:

浏览器指令

你可以定义自己的浏览器指令,这些指令会在 JavaScript 渲染时执行。

用法

要使用浏览器指令,请提供一组 browser_instructions 在创建任务时。

假设您想搜索词 pizza boxes 在某个网站中。

示例任务参数如下:

步骤 1。 您必须提供 "render": "html" 参数。

步骤 2。 浏览器指令应在 "browser_instructions" 字段中描述。

上面的示例浏览器指令说明,目标是将搜索词 pizza boxes 输入搜索字段,点击 搜索 按钮,并等待 5 秒让内容加载。

抓取结果应如下所示:

抓取到的 HTML 应如下所示:

获取浏览器资源

我们提供了一个独立的浏览器指令用于获取浏览器资源。

函数定义如下:

使用 fetch_resource 将导致任务返回与所提供格式匹配的第一个 Fetch/XHR 资源,而不是正在目标页面上的 HTML。

假设我们想要定位在浏览器中以自然方式访问产品页时获取的 GraphQL 资源。我们将提供如下任务信息:

这些指令将产生如下结果:

支持的浏览器指令列表

通用参数

下面定义的所有指令都具有一组一致的参数。参数如下。

type

  • 类型: Enum["click", "input", "scroll", "scroll_to_bottom", "wait", "wait_for_element", "fetch_resource"]

  • 说明: 浏览器指令类型。

timeout_s

  • 类型: int

  • 说明: 如果未能按时完成,动作在多久后被跳过。

  • 限制: 0 < timeout_s <= 60

  • 默认值: 5

wait_time_s

  • 类型: int

  • 说明: 执行下一步动作前等待多久。

  • 限制: 0 < wait_time_s <= 60

  • 默认值: 0

on_error

  • 类型: Enum["error", "skip"]

  • 说明: 指示当此指令失败时如何处理指令:

    • "error": 停止执行浏览器指令。

    • "skip": 继续执行下一条指令。

  • 默认值: "error"

通用参数示例

指令

click

  • 说明: 点击一个元素并等待指定秒数。

  • 参数:

    • type: str = "click"

    • selector: dict

      • type: Enum["xpath", "css", "text"]

      • value: str

示例:

输入

  • 说明: 向选中的元素输入文本。

  • 参数:

    • type: str = "input"

    • selector: dict

      • type: Enum["xpath", "css", "text"]

      • value: str

    • value: str

示例:

滚动

  • 说明: 按指定像素数滚动。

  • 参数:

    • type: str = "scroll"

    • x: int

    • y: int

示例:

scroll_to_bottom

  • 说明: 滚动到底部,持续指定秒数。

  • 参数:

    • type: str = "scroll_to_bottom"

示例:

wait

  • 说明: 等待指定秒数。

  • 参数:

    • type: str = "wait"

示例:

wait_for_element

  • 说明: 等待元素加载,持续指定秒数。

  • 参数:

    • type: str = "wait_for_element"

    • selector: dict

      • type: Enum["xpath", "css", "text"]

      • value: str

示例:

fetch_resource

  • 说明: 获取与指定模式匹配的第一个 Fetch/XHR 资源。

  • 参数:

    • type: str = "fetch_resource"

    • filter: str(RegEx expression)

    • on_error: Enum["error", "skip"]

示例:

指令验证

任何关于指令格式的不一致都会导致一个 400 状态码和相应的错误消息。

例如,如下载荷:

将导致:

故障排查

状态码

请参阅我们概述的响应码 此处。关于指令验证的状态码已记录 此处.

错误和警告

如果你的浏览操作产生了错误或警告,你会在结果中的以下键下找到它: browser_instructions_errorbrowser_instructions_warnings。例如,如果你发送了以下浏览器指令,而页面上找不到预期的 xpath ,结果将包含一个警告。

browser_instructions:

结果:

可能的错误和警告

将浏览器指令转换为操作时发生了意外错误。

执行以下内容时发生了意外错误 {action.type} 浏览器指令。

操作 {action.type} 超时。

无法找到选择器类型 {selector.type} 值为 {selector.value} 在页面上。

最后更新于

这有帮助吗?