zoukankan      html  css  js  c++  java
  • playwright入门

    最近发现了一个自动化测试的神器。
    官网地址:https://playwright.dev/docs/why-playwright/

    Playwright提供了一组API,可自动执行Chromium,Firefox和WebKit浏览器。
    通过使用Playwright API,您可以编写Python代码来创建新的浏览器页面,导航到URL,然后与页面上的元素进行交互。
    Playwright可以与测试运行程序一起用于自动进行用户交互,以验证和测试Web应用程序。
    Playwright API通过以下原语实现此目的。

    • 打开浏览器
    • 浏览器上下文
    • 页面和框架
    • 选择器
    • 自动等待
    • 执行上下文:Node.js和浏览器
    • 对象和元素句柄

    一、安装

    使用阿里源,下载速度快一点。
    pip install playwright -i https://mirrors.aliyun.com/pypi/simple/

    安装Chromium、Firefox、WebKit等浏览器的驱动文件
    python -m playwright install

    二、录制

    使用Playwright无需写一行代码,我们只需手动操作浏览器,它会录制我们的操作,然后自动生成代码脚本。
    下面就是录制的命令codegen,仅仅一行。
    python -m playwright codegen

    举例:我要在baidu.com搜索,用chromium驱动,将结果保存为my.py的python文件。

    python -m playwright codegen --target python -o my.py -b chromium https://www.baidu.com

    下面的例子,展示的打开百度,进行搜索。系统自动录制操作动作,并生成python脚本

    from playwright import sync_playwright
    
    def run(playwright):
        browser = playwright.chromium.launch(headless=False)
        context = browser.newContext()
    
        # Open new page
        page = context.newPage()
    
        # Go to https://www.baidu.com/
        page.goto("https://www.baidu.com/")
    
        # Click input[name="wd"]
        page.click("input[name=\"wd\"]")
    
        # Fill input[name="wd"]
        page.fill("input[name=\"wd\"]", "宝马汽车")
    
        # Go to https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E8%9A%82%E8%9A%81%E6%B2%89%E9%A6%99&fenlei=256&rsv_pq=9922438e0001e6c4&rsv_t=80e30fK9WkdiBWynXeqiNJIl80Q0ZcAuB3ZzCZU6IIcnQXPoLhm4khTU79A&rqlang=cn&rsv_enter=0&rsv_dl=tb&rsv_sug3=14&rsv_sug1=16&rsv_sug7=100&rsv_btype=i&prefixsug=%25E8%259A%2582%25E8%259A%2581%25E6%25B2%2589%25E9%25A6%2599&rsp=5&inputT=6054&rsv_sug4=6670
        page.goto("https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E8%9A%82%E8%9A%81%E6%B2%89%E9%A6%99&fenlei=256&rsv_pq=9922438e0001e6c4&rsv_t=80e30fK9WkdiBWynXeqiNJIl80Q0ZcAuB3ZzCZU6IIcnQXPoLhm4khTU79A&rqlang=cn&rsv_enter=0&rsv_dl=tb&rsv_sug3=14&rsv_sug1=16&rsv_sug7=100&rsv_btype=i&prefixsug=%25E8%259A%2582%25E8%259A%2581%25E6%25B2%2589%25E9%25A6%2599&rsp=5&inputT=6054&rsv_sug4=6670")
    
        page1 = context.newPage()
        # Go to https://zhidao.baidu.com/question/615937275180020252.html
        page1.goto("https://zhidao.baidu.com/question/615937275180020252.html")
    
        # Double click div[id="answer-content-1510052568"]
        page1.dblclick("div[id=\"answer-content-1510052568\"]")
        print(page1.element("div[id=\"answer-content-1510052568\"]").innertext())
        # Close page
        page1.close()
    
        # Close page
        page.close()
    
        # ---------------------
        context.close()
        browser.close()
    
    with sync_playwright() as playwright:
        run(playwright)
    

    三、同步

    下面示例代码:依次打开三个浏览器,前往baidu搜索,截图后退出。

    from playwright import sync_playwright
    with sync_playwright() as p:
    for browser_type in [p.chromium, p.firefox, p.webkit]:
        browser = browser_type.launch()
        page = browser.newPage()
        page.goto('https://baidu.com/')
        page.screenshot(path=f'example-{browser_type.name}.png')
        browser.close()
    

    四、异步

    异步操作可结合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()
    page = await browser.newPage()
    await page.goto('http://baidu.com/')
    await page.screenshot(path=f'example-{browser_type.name}.png')
    await browser.close()
    asyncio.get_event_loop().run_until_complete(main())

  • 相关阅读:
    我们在期待什么?
    ASP.NET的本质–IIS以及进程模式
    javascript开发中要注意的事情
    通过配置web.config发电子邮件详解
    VS2005 中文版下载
    td自动换行CSS
    巧妙利用图片IMG的onerror事件
    网页 页面不缓存
    JS检测对像(支持多版本)
    利用js预缓存图片
  • 原文地址:https://www.cnblogs.com/duoba/p/14297802.html
Copyright © 2011-2022 走看看