这篇教程新一代爬虫利器Python写得很实用,希望能帮到您。 Playwright是Microsoft在2020年初开源的新一代自动化测试工具,它的功能类似于Selenium、Pyppeteer等,都可以驱动浏览器进行各种自动化操作。它的功能也非常强大,对市面上主流浏览器都提供了支持,API功能简洁又强大。虽然诞生的比较晚,但是发展得非常火热。 在Pyppeteer已经不再维护的年代,拥有Playwright这个开源工具是非常棒的选择,文档丰富,功能强大。
安装方式conda config --add channels conda-forgeconda config --add channels microsoftconda install playwrightplaywright install 上述命令的具体运行过程是下载Playwright并将其打包为Chromium、Firefox和Webkit安装浏览器二进制文件。
特点 - Playwright支持当前所有主流浏览器,包括Chrome和Edge(基于Chromium)、Firefox、Safari(基于Webkit),提供完善的自动化控制的API。
- Playwright支持移动端页面的测试,使用设备模拟技术可以在移动web浏览器中测试响应式web应用程序。
- Playwright支持所有浏览器的Headless模式和非Headless模式的测试。
- Playwright的安装配置非常的简单,安装过程中会自动安装对应浏览器的驱动,不需要额外的配置WebDriver等。
- Playwright提供了大量的与自动化相关的API,当页面加载时会自动等待对应节点的加载,大大的简化了编写API的难度。
使用方式在python脚本中导入Playwright,并启动3种浏览器(Chromium、Friefox和webkit)的其中一种。Playwright支持两种编写模式,一种是Pyppeter一样的异步模式,另一种是像Selenium一样的同步模式,我们可以根据实际的需要选择不同的模式。 下面我们先来看看一个基本 同步模式的例子: from playwright.sync_api import sync_playwrightwith sync_playwright() as p: for browser_type in [p.chromium, p.firefox, p.webkit]: browser = browser_type.launch(headless=False) page = browser.new_page() page.goto("https://www.baidu.com") page.screenshot(path=f"screenshot-{browser_type.name}.png") print(page.title()) browser.close() 首先在这里我们导入了sync_playwright方法,然后调用这个方法,该方法返回的是一个PlaywrightContextManager 对象,可以将其理解为浏览器的上下文管理器,这里将其赋值给变量p。接着调用PlaywrightContextManager对象的chromium、firefox、webkit浏览器实例,接着使用for循环依次去执行它们的launch方法,同时设置headless为False。 这里有一个注意点:如果launch没有设置为Flase,默认是无头模式启动浏览器,我们看不到任何的窗口。
launch方法返回的是一个浏览器(Browser)对象,我们将其复制为browser变量,然后调用new_page方法,相当于是新建一个选显卡,返回page对象并赋值给变量page,接下来就是调用page对象的一系列自动化API进行操作。当页面加载完毕之后生成截图、控制台输出结果就退出,上面的代码,调用了page对象的两个方法: 1、screenshot :参数传一个文件的名称,这样截图就会自动保存为该文件的名称。 2、title :返回页面的标题。 这时当前目录便会产生三个截图文件,都是百度的首页,文件名中都带有浏览器的名称,如图所示: 
控制台运行结果: 百度一下,你就知道 百度一下,你就知道 百度一下,你就知道
除了上面所描述的同步模式之外,Playwright还支持异步模式,如果在项目中使用了asyncio,那么就应该是考虑要采用异步模式,使用异步的API,写法如下: import asynciofrom playwright.async_api import async_playwrightasync 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.new_page() await page.goto("https://www.baidu.com") await page.screenshot(path=f"screenshot-{browser_type.name}.png") print(await page.title()) await browser.close()asyncio.run(main()) 从上面的代码可以看出,整个写法和同步模式是很相似的。 注意: Python实现新版正方系统滑动验证码识别 xshell会话批量迁移到mobaxterm的工具(python小工具)
|