JS 渲染和浏览器控制
了解如何使用 render 参数,以及如何在网页爬虫API 中定义浏览器指令,以便爬取复杂的动态页面。
JavaScript 渲染
如果你要抓取的页面使用 JavaScript 将数据加载到 DOM 中,请在你的请求中添加 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())JavaScript 渲染抓取页面需要更多时间。如果使用 Realtime 或 Proxy Endpoint 集成方式,请将客户端超时时间设置为 180 秒。
为确保最低流量消耗,我们的系统在页面渲染期间不会加载不必要的资源。
在特定页面上强制渲染
为确保成功抓取,某些特定域名的页面类型由于其动态内容需要渲染。对于这些页面,我们的系统 会自动强制渲染 即使你未设置 render 参数,因此你始终可以从这些原本难以抓取的页面获得准确、可靠的数据。
请注意,渲染任务比未渲染任务消耗更多流量。
受影响目标的完整列表维护在下面的文件中。我们希望用户在抓取以下页面时充分了解这一点:
如果你想禁用渲染,可以在请求中添加以下参数:
浏览器说明
当页面需要交互时,例如点击按钮、输入搜索词或滚动以加载更多内容,你可以定义自己的 browser_instructions 在页面渲染期间执行的
构建浏览器指令最简单的方法是该处的 AI 驱动可视化构建器 网页爬虫API Playground。了解更多 这里.
快速开始
首先,浏览器指令需要 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: dicttype: Enum["xpath", "css", "text"]value: str
示例:
input
描述:向选定元素输入文本。
参数:
type: str = "input"selector: dicttype: Enum["xpath", "css", "text"]value: str
value: str
示例:
scroll
描述:滚动指定像素数。
参数:
type: str = "scroll"x: inty: int
示例:
scroll_to_bottom
描述:向下滚动到底部,持续指定秒数。
参数:
type: str = "scroll_to_bottom"
示例:
wait
描述:等待指定秒数。
参数:
type: str = "wait"
示例:
wait_for_element
描述:等待元素加载,持续指定秒数。
参数:
type: str = "wait_for_element"selector: dicttype: Enum["xpath", "css", "text"]value: str
示例:
fetch_resource
该 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} 在页面上。
最后更新于
这有帮助吗?

