For the complete documentation index, see llms.txt. This page is also available as Markdown.

JS 渲染和浏览器控制

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

JavaScript 渲染

如果你要抓取的页面使用 JavaScript 将数据加载到 DOM 中,请在你的请求中添加 render 参数。页面随后会先完全渲染,然后我们再返回结果,格式有两种:

render 值
您将获得

html

完全渲染后的页面原始 HTML

png

渲染后页面的 Base64 编码截图(PNG)

如果你想抓取图片并下载,请参阅 本节.

请求示例

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

# Structure payload.
payload = {
    'source': 'universal',
    'url': 'https://www.example.com',
    'render': 'html',
}

# Get response.
response = requests.request(
    'POST',
    'https://realtime.oxylabs.io/v1/queries',
    auth=('USERNAME', 'PASSWORD'),
    json=payload,
)

# Instead of response with job status and results url, this will return the
# JSON response with the result.
pprint(response.json())

在特定页面上强制渲染

为确保成功抓取,某些特定域名的页面类型由于其动态内容需要渲染。对于这些页面,我们的系统 会自动强制渲染 即使你未设置 render 参数,因此你始终可以从这些原本难以抓取的页面获得准确、可靠的数据。

受影响目标的完整列表维护在下面的文件中。我们希望用户在抓取以下页面时充分了解这一点:

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

浏览器说明

当页面需要交互时,例如点击按钮、输入搜索词或滚动以加载更多内容,你可以定义自己的 browser_instructions 在页面渲染期间执行的

快速开始

首先,浏览器指令需要 render 参数,或者 html 还是 png,并以列表形式提供在 browser_instructions 字段中。列表中的每一项按顺序执行。

假设你想搜索 披萨盒 在网站上——将该词输入搜索框,点击搜索按钮,然后等待 5 秒让结果加载:

结果包含指令执行后的 HTML:

抓取到的 HTML 应如下所示:

获取浏览器资源

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

函数定义如下:

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

假设我们想定位一个 GraphQL 资源,该资源会在浏览器中自然访问商品页面时被获取。我们将这样提供任务信息:

这些指令将得到如下结果:

支持的浏览器指令列表

通用参数

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

type

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

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

  • 必填: true

timeout_s

  • 类型: 整数

  • 说明: 如果未能在规定时间内完成,多久后跳过该操作。

  • 限制: 0 < timeout_s <= 60

  • 默认值: 5

wait_time_s

  • 类型: 整数

  • 说明: 在执行下一步操作前等待多长时间。

  • 限制: 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

示例:

input

  • 描述:向选定元素输入文本。

  • 参数:

    • type: str = "input"

    • selector: dict

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

      • value: str

    • value: str

示例:

scroll

  • 描述:滚动指定像素数。

  • 参数:

    • 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_error 还是 browser_instructions_warnings。例如,如果你发送了以下浏览器指令,而预期的 xpath 未在页面上找到,结果将包含警告。

browser_instructions:

结果:

可能的错误和警告

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

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

操作 {action.type} 超时。

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

最后更新于

这有帮助吗?