Request
每当页面发送网络资源请求时,Page 会发出以下一系列事件
- page.on("request") 当页面发出请求时触发。
- page.on("response") 当/如果收到请求的状态和标头时触发。
- page.on("requestfinished") 当响应正文下载完成且请求完成时触发。
如果在某个点请求失败,则会发出 page.on("requestfailed") 事件,而不是 'requestfinished' 事件(并且可能不是 'response' 事件)。
HTTP 错误响应,例如 404 或 503,从 HTTP 角度来看仍然是成功响应,因此请求将以'requestfinished'事件完成。
如果请求收到“重定向”响应,则该请求将成功地以requestfinished事件完成,并且会向重定向的 URL 发出新请求。
方法
all_headers
新增于: v1.15一个包含与此请求关联的所有请求 HTTP 标头的对象。标头名称是小写。
用法
request.all_headers()
返回
header_value
新增于: v1.15返回与名称匹配的标头的值。名称不区分大小写。
用法
request.header_value(name)
参数
返回
headers_array
新增于: v1.15一个包含此请求关联的所有请求 HTTP 标头的数组。与 request.all_headers() 不同,标头名称不会被转换为小写。具有多个条目的标头(如 Set-Cookie)会在数组中多次出现。
用法
request.headers_array()
返回
response
v1.9 之前添加返回匹配的 Response 对象,如果由于错误未收到响应,则返回 null。
用法
request.response()
返回
sizes
新增于: v1.15返回给定请求的资源大小信息。
用法
request.sizes()
返回
属性
failure
v1.9 之前添加此方法返回null,除非此请求已失败,如requestfailed事件报告的那样。
用法
记录所有失败请求的示例
page.on("requestfailed", lambda request: print(request.url + " " + request.failure))
返回
frame
v1.9 之前添加返回发起此请求的 Frame。
用法
frame_url = request.frame.url
返回
详情
请注意,在某些情况下,frame 不可用,此方法将抛出错误。
- 当请求源自 Service Worker 时。您可以使用
request.serviceWorker()进行检查。 - 当导航请求在相应的 frame 创建之前发出时。您可以使用 request.is_navigation_request() 来检查这一点。
这是一个处理所有情况的示例
headers
v1.9 之前添加一个包含请求 HTTP 标头的对象。标头名称会被转换为小写。请注意,此方法不返回安全相关的标头,包括与 cookie 相关的标头。您可以使用 request.all_headers() 来获取包含 cookie 信息的完整标头列表。
用法
request.headers
返回
is_navigation_request
v1.9 之前添加此请求是否正在驱动 frame 的导航。
一些导航请求在相应的 frame 创建之前发出,因此没有 request.frame 可用。
用法
request.is_navigation_request()
返回
method
v1.9 之前添加请求方法(GET、POST 等)
用法
request.method
返回
post_data
v1.9 之前添加请求的 POST 正文,如果有的话。
用法
request.post_data
返回
post_data_buffer
v1.9 之前添加请求的 POST 正文的二进制形式,如果有的话。
用法
request.post_data_buffer
返回
post_data_json
v1.9 之前添加返回解析后的请求正文,对于form-urlencoded和 JSON(作为备用)而言,如果有的话。
当响应是application/x-www-form-urlencoded时,将返回一个键/值对象。否则,它将被解析为 JSON。
用法
request.post_data_json
返回
redirected_from
v1.9 之前添加被服务器重定向到此请求的请求,如果有的话。
当服务器响应重定向时,Playwright 会创建一个新的 Request 对象。这两个请求通过 redirectedFrom() 和 redirectedTo() 方法连接。当发生多个服务器重定向时,可以通过重复调用 redirectedFrom() 来构建完整的重定向链。
用法
例如,如果网站http://example.com重定向到https://example.com
- 同步
- 异步
response = page.goto("http://example.com")
print(response.request.redirected_from.url) # "http://example.com"
response = await page.goto("http://example.com")
print(response.request.redirected_from.url) # "http://example.com"
如果网站https://google.com没有重定向
- 同步
- 异步
response = page.goto("https://google.com")
print(response.request.redirected_from) # None
response = await page.goto("https://google.com")
print(response.request.redirected_from) # None
返回
redirected_to
v1.9 之前添加如果服务器响应重定向,浏览器发出的新请求。
用法
此方法与 request.redirected_from 相反。
assert request.redirected_from.redirected_to == request
返回
resource_type
v1.9 之前添加包含渲染引擎感知到的请求资源类型。ResourceType 将是以下之一:document、stylesheet、image、media、font、script、texttrack、xhr、fetch、eventsource、websocket、manifest、other。
用法
request.resource_type
返回
service_worker
添加于:v1.24执行请求的服务 Worker。
用法
request.service_worker
返回
详情
此方法仅适用于 Chromium。在使用其他浏览器时调用它是安全的,但它将始终返回 null。
来自 Service Worker 的请求没有可用的 request.frame。
timing
v1.9 之前添加返回给定请求的资源计时信息。大多数计时值在响应时可用,responseEnd 在请求完成时可用。有关更多信息,请参阅 Resource Timing API。
用法
- 同步
- 异步
with page.expect_event("requestfinished") as request_info:
page.goto("http://example.com")
request = request_info.value
print(request.timing)
async with page.expect_event("requestfinished") as request_info:
await page.goto("http://example.com")
request = await request_info.value
print(request.timing)
返回
- Dict#
-
startTimefloat请求开始时间,自 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒数
-
domainLookupStartfloat浏览器开始查找资源域名之前的时间。该值以相对于
startTime的毫秒数给出,如果不可用则为 -1。 -
domainLookupEndfloat浏览器开始查找资源域名之后的时间。该值以相对于
startTime的毫秒数给出,如果不可用则为 -1。 -
connectStartfloat用户代理开始建立与服务器的连接以检索资源之前的时间。该值以相对于
startTime的毫秒数给出,如果不可用则为 -1。 -
secureConnectionStartfloat浏览器开始握手过程以保护当前连接之前的时间。该值以相对于
startTime的毫秒数给出,如果不可用则为 -1。 -
connectEndfloat用户代理开始建立与服务器的连接以检索资源之前的时间。该值以相对于
startTime的毫秒数给出,如果不可用则为 -1。 -
requestStartfloat浏览器开始从服务器、缓存或本地资源请求资源之前的时间。该值以相对于
startTime的毫秒数给出,如果不可用则为 -1。 -
responseStartfloat浏览器从服务器、缓存或本地资源收到响应的第一个字节之后的时间。该值以相对于
startTime的毫秒数给出,如果不可用则为 -1。 -
responseEndfloat浏览器收到资源的最后一个字节之后的时间,或者传输连接关闭之前的时间,以先发生者为准。该值以相对于
startTime的毫秒数给出,如果不可用则为 -1。
-
url
v1.9 之前添加请求的 URL。
用法
request.url
返回