📖 前言
👋 简介
本章节主要对Playwright框架进行简单的使用,并介绍Playwright框架自带的一些特性。
💡 正文
1 初此使用Playwright
from playwright.sync_api import sync_playwright
input('1....')
# 启动 playwright driver 进程
p = sync_playwright().start()
input('2....')
# 启动浏览器,返回 Browser 类型对象,headless默认True,看不到界面,所以关闭无头模式
browser = p.chromium.launch(headless=False)
# 创建新页面,返回 Page 类型对象
page = browser.new_page()
# 浏览器打开百度
page.goto("https://www.baidu.com")
# 打印网页标题栏
print(page.title())
# 输入playwright
page.locator('#kw').fill('playwright')
# 点击查询
page.locator('#su').click()
input('3....')
# 关闭浏览器
browser.close()
input('4....')
# 关闭 playwright driver 进程
p.stop()
上面代码中,启动的浏览器类型,同样可以更换成以下类型:
# 启动firefox浏览器
browser = p.firefox.launch(headless=False)
# 启动webkit浏览器
browser = p.webkit.launch(headless=False)
可以通过参数 executable_path
指定使用安装的其它浏览器:
# 加上 executable_path参数
browser = p.chromium.launch(headless=False,executable_path='D:\02Install\360\360ChromeX\Chrome\Application\360ChromeX.exe')
2 使用会话管理
我们可以通过使用 with as
会话管理,我们的代码简化,不需要调用 start()
和stop()
from playwright.sync_api import sync_playwright
import time
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto("https://www.baidu.com")
print(page.title())
page.locator('#kw').fill('playwright')
page.locator('#su').click()
# 等待3秒,避免浏览器关闭太快
time.sleep(3)
browser.close()
3 界面等待
上一步的代码中,我们使用了time.sleep()
作为等待方式。
但是目前,我们不能在Playwright中使用 time.sleep()
进行等待,因为Playwright底层使用的是异步的python库进行各种事件处理,time.sleep()
会破坏异步框架的处理逻辑。
我们可以使用可以使用 Page 对象的 wait_for_timeout
方法达到等待效果,单位是 毫秒
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto("https://www.baidu.com")
print(page.title())
page.locator('#kw').fill('playwright')
page.locator('#su').click()
# 将等待时间修改为下面这行代码
page.wait_for_timeout(3000)
browser.close()
4 代码助手
Playwright 内置了 代码助手 的功能,可以帮我们产生 自动化代码
输入命令playwright codegen
,即可启动代码助手
备注:这个只能作为助手,它主要是记录人对页面的输入,并不能取代人自己写代码,特别是那些获取页面上信息的代码。比如,这个打印标题栏print(page.title())
,就没法自动化生成
5 跟踪记录
Playwright 有个特色功能: 跟踪(tracing)
启用跟踪功能后, 可以在执行自动化后,通过记录的跟踪数据文件, 回看自动化过程中的每个细节。
以下代码实现打开百度进行搜索playwright和python
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
# 创建 BrowserContext对象
context = browser.new_context()
# 启动跟踪功能
context.tracing.start(snapshots=True, sources=True, screenshots=True)
page = context.new_page()
page.goto("https://www.baidu.com")
page.locator('#kw').fill('playwright')
page.locator('#su').click()
page.wait_for_timeout(2000)
page.locator('#kw').fill('python')
page.locator('#su').click()
page.wait_for_timeout(2000)
# 结束跟踪
context.tracing.stop(path="trace.zip")
browser.close()
执行完代码后,同级目录中自动生成一个trace.zip的文件,我们可以通过两种方式来打开
- 直接访问 trace.playwright.dev 这个网站,上传跟踪文件
- 执行命令
playwright show-trace trace.zip