当前位置: 首页 > 后端技术 > Python

微软开源Python自动化神器Playwright

时间:2023-03-25 23:37:06 Python

近日,微软开源了一个名为“playwright-python”的项目,这是一个纯Python语言的自动化工具。它可以通过单个API自动执行Chromium、Firefox和WebKit浏览器,甚至无需编写代码即可实现自动化功能。和测试工具selenium相比,playwright-python简直就是初学者的神器。Playwright真的可以使用Python吗?答案是肯定的,微软已经为PlaywrightforPython做好了准备。可能会发生API重大更改。但很有可能这不会发生,而且微软还表示,只有在他们知道它可以改善你使用新库的体验时才会这样做。不过,微软也警告说,目前还不支持某些供应商特定API的cornercase,例如收集Chromiumtraces、覆盖率报告等。1.Playwright介绍Playwright是一个强大的Python库,可以自动执行主流的自动化操作Chromium、Firefox、WebKit等只有一个API的浏览器,同时支持无头模式和有头模式运行。Playwright提供的自动化技术绿色、强大、可靠、快速,支持Linux、Mac和Windows操作系统。2.Playwright的安装Playwright的安装非常简单,两步。安装playwright库pipinstallplaywright安装浏览器驱动文件(安装过程有点慢)python-mplaywrightinstall复制代码以上两个pip操作分别安装:安装Playwright依赖库,Python3.7+需要安装Chromium、Firefox、WebKit等。浏览器驱动文件记录使用Playwright无需编写一行代码,我们只需要手动操作浏览器,它就会记录我们的操作,然后自动生成代码脚本。下面是记录的命令codegen,就一行。在命令行中键入--help以查看所有选项。python-mplaywrightcodegen复制代码。您可以使用--help查看codegen的使用情况。如果使用简单,直接在命令后面加上url链接即可。如果您有其他需求,可以添加选项。python-mplaywrightcodegen--helpUsage:indexcodegen[options][url]openpageandgeneratecodeforuseractionsOptions:-o,--output将生成的脚本保存到文件中--targetlanguage使用javascript、python、python-async、csharp之一(默认值:“python”)-h,--help显示命令的帮助示例:$codegen$codegen--target=python$-bwebkitcodegenhttps://example.com复制代码选项含义:-o:将录制的脚本保存到文件--target:指定生成脚本的语言,有JS和Python两种,默认为Python-b:指定浏览器驱动比如我想在baidu.com上搜索,用chromium驱动,结果保存为my.py的python文件。python-mplaywrightcodegen--targetpython-o'my.py'-bchromiumhttps://www.baidu.com复制代码进入命令行后,浏览器会自动打开,然后就可以看到每一个move在浏览器上会自动翻译成代码,如下图。结束后浏览器自动关闭,生成的自动化脚本保存到py文件中。fromplaywrightimportsync_playwrightdefrun(playwright):browser=playwright.chromium.launch(headless=False)context=browser.newContext()#打开新页面page=context.newPage()page.goto("https://www.baidu.com/")page.click("input[name="wd"]")page.fill("input[name="wd"]","京东")page.click("text="京东"")#点击//a[normalize-space(.)='京东官网更快更好更省只为品质生活']withpage.expect_navigation():withpage.expect_popup()aspopup_info:page.click("//a[normalize-space(.)='京东官网更快更好更省只为品质生活']")page1=popup_info.value#--------------------context.close()browser.close()和sync_playwright()asplaywright:run(playwright另外,playwright还提供同步和异步API接口,文档为链接:https://microsoft.github.io/playwright-python/index.html同步下面的示例代码:打开三个浏览器一个一、去百度搜索,截图退出。fromplaywrightimportsync_playwrightwithsync_playwright()asp:forbrowser_typein[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同时执行三个浏览器操作。importasynciofromplaywright导入async_playwrightasyncdefmain():asyncwithasync_playwright()asp:forbrowser_typein[p.chromium,p.firefox,p.webkit]:browser=awaitbrowser_type.launch()page=awaitbrowser.newPage()awaitpage.goto('http://baidu.com/')awaitpage.screenshot(path=f'example-{browser_type.name}.png')awaitbrowser.close()asyncio.get_event_loop().run_until_complete(main())复制代码移动端如虎添翼,剧作家在移动端也可以支持浏览器模拟。下面是官方文档提供的一段代码,在给定的地理位置模拟手机iphone11pro上的Safari浏览器,首先导航到maps.google.com,然后进行定位并截图。fromplaywrightimportsync_playwrightwithsync_playwright()asp:iphone_11=p.devices['iPhone11Pro']browser=p.webkit.launch(headless=False)context=browser.newContext(**iphone_11,locale='en-US',geolocation={'longitude':12.492507,'latitude':41.889938},permissions=['geolocation'])page=context.newPage()page.goto('https://maps.google.com')page.click('text="你的位置"')page.screenshot(path='colosseum-iphone.png')browser.close()复制代码另外也可以配合pytest插件使用。如果你有兴趣,你可以自己尝试一下。3.总结Playwright相对于现有的自动化测试工具有很多优势,比如:跨浏览器,支持Chromium、Firefox、WebKit跨操作系统,支持Linux、Mac、Windows可以提供录制和生成代码的功能,解放双手,可用于移动设备PlaywrightAPI可用于JavaScript、TypeScript、Python、C#和Java。现在剧作家已经更新到1.7.0版本。目前的缺点是生态和文档不是很完备。比如没有API中文文档,也没有很好的学习教程和例子。但是我相信随着越来越多的人知道它,未来会越来越好。GitHub链接:https://github.com/microsoft/playwright-python传送门:https://playwright.dev/开源组织:Microsoft