请求
每当页面发送网络资源请求时,Page会依次触发以下事件序列:
- page.on("request") 当页面发出请求时触发。
- page.on("response") 当/如果收到请求的响应状态和头部时触发。
- page.on("requestfinished") 当响应体下载完成且请求结束时触发。
如果请求在某个环节失败,那么不会触发'requestfinished'
事件(也可能不会触发'response'事件),而是会触发page.on("requestfailed")事件。
HTTP错误响应,例如404或503,从HTTP角度来看仍然是成功的响应,因此请求将以'requestfinished'
事件完成。
如果请求收到'redirect'响应,该请求将以requestfinished
事件成功完成,并会向重定向的URL发起一个新请求。
方法
所有头部信息
Added in: v1.15一个包含与此请求相关的所有HTTP请求头的对象。所有头名称均为小写。
用法
request.all_headers()
返回
header_value
Added in: v1.15返回与名称匹配的标头值。名称不区分大小写。
用法
request.header_value(name)
参数
返回
headers_array
Added in: v1.15一个包含与此请求关联的所有请求HTTP头信息的数组。与request.all_headers()不同,此处头名称不会转为小写。具有多个条目的头信息(例如Set-Cookie
)会在数组中多次出现。
用法
request.headers_array()
返回
响应
Added before v1.9返回匹配的Response对象,如果由于错误未收到响应则返回null
。
用法
request.response()
返回
尺寸
Added in: v1.15返回给定请求的资源大小信息。
用法
request.sizes()
返回
属性
失败
Added before v1.9该方法返回null
,除非请求失败,如requestfailed
事件所报告。
用法
记录所有失败请求的示例:
page.on("requestfailed", lambda request: print(request.url + " " + request.failure))
返回
框架
Added before v1.9返回发起此请求的Frame。
用法
frame_url = request.frame.url
返回
详情
请注意,在某些情况下框架不可用,此方法会抛出异常。
- 当请求源自Service Worker时。您可以使用
request.serviceWorker()
来检查这一点。 - 当导航请求在对应的框架创建之前被发出时。您可以使用request.is_navigation_request()来检查这一点。
这是一个处理所有情况的示例:
headers
Added before v1.9一个包含请求HTTP头信息的对象。头名称均为小写。请注意,此方法不会返回与安全相关的头信息,包括与cookie相关的头。您可以使用request.all_headers()获取包含cookie
信息的完整头列表。
用法
request.headers
返回
is_navigation_request
Added before v1.9此请求是否驱动框架的导航。
某些导航请求在对应的框架创建之前就已发出,因此没有request.frame可用。
用法
request.is_navigation_request()
返回
方法
Added before v1.9请求的方法(GET、POST等)
用法
request.method
返回
post_data
Added before v1.9请求的post正文(如果有的话)。
用法
request.post_data
返回
post_data_buffer
Added before v1.9请求的post body以二进制形式存在(如果有的话)。
用法
request.post_data_buffer
返回
post_data_json
Added before v1.9返回解析后的请求体,如果是form-urlencoded
格式则优先解析,否则会尝试解析为JSON格式。
当响应为application/x-www-form-urlencoded
时,将返回值的键/值对象。否则将解析为JSON。
用法
request.post_data_json
返回
重定向来源
Added before v1.9如果存在,这是由服务器重定向到当前请求的原始请求。
当服务器响应重定向时,Playwright会创建一个新的Request对象。这两个请求通过redirectedFrom()
和redirectedTo()
方法相互关联。当发生多次服务器重定向时,可以通过重复调用redirectedFrom()
来构建完整的重定向链。
用法
例如,如果网站 http://example.com
重定向到 https://example.com
:
- Sync
- 异步
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
没有重定向:
- Sync
- 异步
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
Added before v1.9如果服务器响应重定向,浏览器将发出新的请求。
用法
这个方法是request.redirected_from的反向操作:
assert request.redirected_from.redirected_to == request
返回
资源类型
Added before v1.9包含渲染引擎感知到的请求资源类型。ResourceType将是以下之一:document
, stylesheet
, image
, media
, font
, script
, texttrack
, xhr
, fetch
, eventsource
, websocket
, manifest
, other
。
用法
request.resource_type
返回
计时
Added before v1.9返回给定请求的资源计时信息。大多数计时值在响应时可用,responseEnd
在请求完成时可用。更多信息请参阅Resource Timing API。
用法
- Sync
- 异步
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)
返回
- 字典#
-
startTime
float请求开始时间,以毫秒为单位,自UTC时间1970年1月1日00:00:00起计算
-
domainLookupStart
float浏览器开始对资源进行域名查找之前的时间。该值以相对于
startTime
的毫秒数给出,如果不可用则为-1。 -
domainLookupEnd
float浏览器完成资源域名查找后立即记录的时间。该值以相对于
startTime
的毫秒数给出,如果不可用则为-1。 -
connectStart
float用户代理开始与服务器建立连接以获取资源之前的时间。该值以相对于
startTime
的毫秒数给出,如果不可用则为-1。 -
secureConnectionStart
float浏览器开始安全连接握手过程前的时间点。该值以毫秒为单位,相对于
startTime
给出,如果不可用则为-1。 -
connectEnd
float用户代理开始建立与服务器的连接以获取资源之前的时间。该值以相对于
startTime
的毫秒数表示,如果不可用则为-1。 -
requestStart
float浏览器开始从服务器、缓存或本地资源请求资源之前的时间点。该值以相对于
startTime
的毫秒数给出,如果不可用则为-1。 -
responseStart
float浏览器从服务器、缓存或本地资源接收到响应第一个字节后的即时时间。该值以相对于
startTime
的毫秒数给出,如果不可用则为-1。 -
responseEnd
float浏览器接收到资源的最后一个字节后立即的时间,或传输连接关闭前立即的时间,以先发生者为准。该值以相对于
startTime
的毫秒数给出,如果不可用则为-1。
-
网址
Added before v1.9请求的URL。
用法
request.url
返回