当前位置: 首页 > article >正文

详解使用asyncio实现playwright并发操作(复制源码即可运行)

asyncio实现并发

我们可以使用asyncio来解决palywright中并发的问题,asyncio即Asynchronous I/O是python一个用来处理并发(concurrent)事件的包,是很多python异步架构的基础,多用于处理高并发网络请求方面的问题。给大家举一个经典的应用场景就懂了,在不同的浏览器中同时执行打开百度首页,获取title的操作,代码如下:

import asyncio
import time
from playwright.async_api import async_playwright

async def playwright_async_chromium():
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=False)
        page = await browser.new_page()
        await page.goto('http://baidu.com/')
        #await asyncio.sleep(2)
        print(await page.title())
        await asyncio.sleep(10)
        await browser.close()

async def playwright_async_firefox():
    async with async_playwright() as p:
        browser = await p.firefox.launch(headless=False)
        page = await browser.new_page()
        await page.goto('http://baidu.com/')
        #await asyncio.sleep(2)
        print(await page.title())
        await asyncio.sleep(10)
        await browser.close()

async def playwright_async_webkit():
    async with async_playwright() as p:
        browser = await p.webkit.launch(headless=False)
        page = await browser.new_page()
        await page.goto('http://baidu.com/')
        #await asyncio.sleep(2)
        print(await page.title())
        await asyncio.sleep(10)
        await browser.close()

#首先说明的是playwright中的并发操作需要对异步函数进行操作,因此定义了三个方法

async def playwright_async_chromium

async def playwright_async_firefox()

async def playwright_async_webkit()

接下来的代码实现是关于asyncio异步运行函数的,大家参考下面的形式实现即可

#把这三个函数放入task是中
tasks = [playwright_async_chromium(),playwright_async_firefox(),playwright_async_webkit()] # tasks列表用于存放task

#事件循环event loop 是asyncio的核心,会运行异步任务和回调,执行网络IO操作,运行子进程。使用get_event_loop()获取当前事件循环。
loop = asyncio.get_event_loop()
startTime = time.time()

#执行tasks队列中的函数,直到最晚的一个事件被处理完毕后结束
loop.run_until_complete(asyncio.wait(tasks))

#如果不在使用loop,建议使用关闭,类似操作文件的close()函数
loop.close()
endTime = time.time()
print("sum time: ",endTime-startTime)

代码执行,显示输出22s左右

并发代码优化

接下来我们可以优化一下代码,同样的操作在三个浏览器中运行没必要写三个函数,我们优化一下函数逻辑,直接上代码:

async def playwright_async_browser(p_browser):
    async with async_playwright() as p:
        if p_browser.lower()=="webkit":
           browser = await p.webkit.launch(headless=False)
        elif p_browser.lower()=="firefox":
           browser = await p.firefox.launch(headless=False)
        else:
           browser = await p.chromium.launch(headless=False)
        page = await browser.new_page()
        await page.goto('http://baidu.com/')
        print(await page.title())
        await asyncio.sleep(10)
        await browser.close()

可以看到,实现思路很简单,通过条件语句实现不同的参数输入来启动不同的浏览器,其他都不变,重新设置tasks即可,代码如下:

tasks = [playwright_async_browser("webkit"),playwright_async_browser("Firefox"),playwright_async_browser("chromium")]

代码执行,显示输出也是22s左右!

上面的代码就是playwright 并发运行的实现思路,希望对大家有帮助!

我的每一篇文章都希望帮助读者解决实际工作中遇到的问题!如果文章帮到了您,劳烦点赞、收藏、转发!您的鼓励是我不断更新文章最大的动力!


http://www.kler.cn/news/134773.html

相关文章:

  • [Kettle] 生成记录
  • 3.8-镜像的发布
  • Kotlin学习——hello kotlin 函数function 变量 类 + 泛型 + 继承
  • 创建maven项目
  • Shell判断:流程控制—if(三)
  • 微服务实战系列之Gateway
  • MidJourney笔记(1)-入门
  • 九章云极DataCanvas大模型系列成果发布会重磅来袭,诚邀见证!
  • 程序设计实践学习笔记
  • 充电桩负载测试需要检测哪些项目
  • JSP页面文本展示正常 但定义在java代码中的内容 输出在页面上会变成问号 问题解决
  • 你学了Python之后让你成为行业卷王,升职加薪更有优势
  • 用微信玩转家用监控?深信服专家提醒家用小心安全问题
  • 交易机器人-微信群通知
  • store下的getter.js什么作用
  • ES的常用查询
  • 深入了解 Bat 脚本:简单而强大的自动化工具——基础版
  • Appium移动自动化测试--安装Appium
  • h264流播放
  • 科技云报道:全球勒索攻击创历史新高,如何建立网络安全的防线?
  • Servlet API 详解
  • js中数组的遍历的几种方法
  • ERR_PNPM_INVALID_WORKSPACE_CONFIGURATION packages field missing or empty
  • Vue3 插槽 v-slot
  • 【目标测距】雷达投影测距
  • 前端JS模块化对外暴露的三种方法
  • 纯CSS实现炫酷文本阴影效果
  • 石油石化物资采购杂志社石油石化物资采购编辑部2023年第18期部分目录
  • 【Spring Boot】如何自定义序列化以及反序列器
  • 《轻购优品》新零售玩法:消费积分认购+众筹新玩法