当前位置 博文首页 > python+playwright微软自动化工具的使用

    python+playwright微软自动化工具的使用

    作者:烟-锁-池-塘-柳 时间:2021-07-29 18:45

    它支持主流的浏览器,包含:Chrome、Firefox、Safari、Microsoft Edge 等,同时支持以无头模式、有头模式运行

    playwright-python 提供了同步、异步的 API,可以结合 Pytest 测试框架使用,并且支持浏览器端的自动化脚本录制

    项目地址:https://github.com/microsoft/playwright-python

    安装playwright-python,执行命令:pip install playwright

    安装成功之后,执行命令:python -m playwright install,自动下载 Chromeium、Firefox、Safari(WebKit)浏览器驱动到本地

    同步

    同步的关键字为:sync_playwright

    比如,我们依次使用三个浏览器内核打开浏览器,然后百度一下,接着对在搜索界面截图,最后关闭浏览器

    from time import sleep
     
    from playwright import sync_playwright
     
    # 注意:默认是无头模式
     
    with sync_playwright() as p:
        # 分别对应三个浏览器驱动
        for browser_type in [p.chromium, p.firefox, p.webkit]:
     
            # 指定为有头模式,方便查看
            browser = browser_type.launch(headless=False)
            page = browser.newPage()
            page.goto('http://baidu.com')
     
            # 执行一次搜索操作
            page.fill("input[name=\"wd\"]", "AirPython")
            with page.expect_navigation():
                page.press("input[name=\"wd\"]", "Enter")
     
            # 等待页面加载完全
            page.waitForSelector("text=百度热榜")
     
            # 截图
            page.screenshot(path=f'example-{browser_type.name}.png')
     
            # 休眠5s
            sleep(5)
     
            # 关闭浏览器
            browser.close()

    需要指出的是,playwright-python 内置的 API 基本上囊括常见的自动化操作

    异步

    异步步的关键字为:async_playwright

    结合 asyncio,我们同时执行上面的操作

    import asyncio
     
    from playwright import async_playwright
     
    # 异步执行
    async def main():
        async with async_playwright() as p:
            for browser_type in [p.chromium, p.firefox, p.webkit]:
                # 指定为有头模式,方便查看
                browser = await browser_type.launch(headless=False)
                page = await browser.newPage()
     
                await page.goto('http://baidu.com')
     
                # 执行一次搜索操作
                await page.fill("input[name=\"wd\"]", "AirPython")
                await page.press("input[name=\"wd\"]", "Enter")
     
                # 等待页面加载完全
                await page.waitForSelector("text=百度热榜")
     
                # 截图
                await page.screenshot(path=f'example-{browser_type.name}.png')
     
                await browser.close()
     
     
    asyncio.get_event_loop().run_until_complete(main())

    事实上,Playwright 是一个跨语言的自动化框架,支持 Python、Java、JS 等

    Playwright 相比传统的自动化框架 Selenium 来说,在 Context 上下文及 API 使用上,显得更简洁且强大

    jsjbwy