首页 > 编程语言 >playwright-python等待请求响应

playwright-python等待请求响应

时间:2023-08-30 17:55:04浏览次数:32  
标签:playwright python await request response click 响应 page

使用playwright打开一个页面时,要等待某一接口的响应。
在看官网提供的node.js的文档时很容易的找到了

// Start waiting for response before clicking. Note no await.
const responsePromise = page.waitForResponse('https://example.com/resource');
await page.getByText('trigger response').click();
const response = await responsePromise;

// Alternative way with a predicate. Note no await.
const responsePromise = page.waitForResponse(response =>
  response.url() === 'https://example.com' && response.status() === 200
);
await page.getByText('trigger response').click();
const response = await responsePromise;

page.waitForResponse,看起来就是我们要的香香,但当想应用进python中时,发现python中并没有这一方法。
仔细翻阅 playwright-python 文档,其中对于等待请求响应的建议是 expect_request

with page.expect_request("http://example.com/resource") as first:
    page.get_by_text("trigger request").click()
first_request = first.value

# or with a lambda
with page.expect_request(lambda request: request.url == "http://example.com" and request.method == "get") as second:
    page.get_by_text("trigger request").click()
second_request = second.value

这个乍一看也许不太好理解(我才不会承认经验尚浅的我为了从文档中找答案尝试了很久...
好,公布答案:

with page.expect_request("port") as res:
    page.goto("url") # page.get_by_role("link", name="action").click()
response = res.value.response()
response.finished()
parse(response)

逐行解释:

  1. 开启对目标接口"port"的捕捉
  2. 某个跳转过程(要确定在这个过程中会触发对接口"port"的请求)
  3. 获取该请求的响应对象
  4. 等待该响应完成
  5. 解析该响应,获取你的需要

如此运行了半个小时,对比page.on监听器的方法,再没有见一个playwright的异常~

标签:playwright,python,await,request,response,click,响应,page
From: https://www.cnblogs.com/thx2199/p/17667910.html

相关文章

  • Python获取cookie的方法
    方法一、通过接口获取         deftest_002():session=requests.session()get_url='https://Login/MDAccountLogin'data={"password":"jTkwfEnaQeb9u5A1Gx6h3CwsfEVcOWPCo/blACFl8FXFsWr","isC......
  • python selenium报错ValueError: Timeout value connect was <...>, but it must be an
    最近学习爬虫,安装selenium,很简单地执行代码,但是一直报错。importtimeimportopenpyxlfromseleniumimportwebdriverfromselenium.webdriver.common.keysimportKeysfromselenium.webdriver.common.byimportByfromselenium.webdriver.chrome.serviceimportService......
  • Python教程(11)——Python中的字典dict的用法介绍
    列表虽然好,但是如果需要快速的数据查找,就必须进行需要遍历,也就是最坏情况需要遍历完一遍才能找到需要的那个数据,时间复杂度是O(n),显然这个速度是很难接受的,于是就必须要有新的数据结构出现,于是字典就诞生了!在Python中,字典(Dictionary)是一种无序的数据结构,用于存储键值对(key-value)。......
  • flask之cbv源码分析,模板,请求与响应,session和源码分析,闪现,请求扩展
    目录1cbv分析1.1源码分析2模板2.1py2.2html3请求与响应4session及源码分析4.1session的使用4.2源码分析4.3session执行原理5闪现6请求扩展1cbv分析#基于类的视图,写法fromflaskimportFlask,requestfromflask.viewsimportView,MethodViewapp=Flask(__......
  • python使用一个目录启动为web服务
    python2版本#mac举例#1、进入命令行#2、cd到指定目录cd/Users/apple/Downloads#3、启动服务python2-mSimpleHTTPServer8080#4、访问http://局域网ip:8080/文件名 python3版本#mac举例#1、进入命令行#2、cd到指定目录cd/Users/apple/Downloads#3、启动服......
  • Python的glob库用法
    glob是Python标准库中的一个模块,用于查找匹配特定模式的文件路径名。它通常用于在文件系统中查找文件、文件夹等。下面是glob模块的一些常用用法示例:导入模块:importglob查找所有文件:file_list=glob.glob('/path/to/directory/*')这会返回指定目录中的所有文件......
  • python列表实操(一)
    #1.构建一个列表,.通过随机数插入5个整数,importrandomlist1=[]foriinrange(5):list1.append(random.randint(0,9))print(list1)#1.1将这个列表末尾添加"张翠山"list1.append("张翠山")print(list1)#1.2删除第三个元素list1.pop(2)print(list1)#1.3在第4个......
  • python列表的应用(二)
    #2.注册账户,保存到列表中#2.1.注册的数据不大于5个#2.2.如果输入已经存在的用户,提示"用户名太受欢迎"#2.3.如果输入非法信息,提示"根据相关法律法规,不能使用此类字符",非法信息为['蜜蜂','高圆圆']list1=[]list2=['蜜蜂','高圆圆']whileTrue:user=input("请输......
  • Python drf day02
    restful规范restful规范是什么,如何来的?是一种定义WebAPI接口的设计风格,尤其适用于前后端分离的应用模式中的规范RoyFielding的博士论文提出的restful规范的具体内容1.数据的安全保障--》url链接一般都采用https协议进行传输,它比http安全2.接口特征表现--》url中带api......
  • Python列表的索引和切片
    Python列表的索引和切片使用及语法如下:列表索引:使用方括号([])来访问列表中的元素。索引从0开始,最左边的元素的索引为0,依次递增。负数索引从最右边的元素开始,最右边的元素的索引为-1,依次递减。示例:my_list=['a','b','c','d']print(my_list[0])#输出'a'print(my......