playwright基础使用操作、断点、窗口最大化、启动本地浏览器、加载本地缓存、滑块操作、图片验证码识别、Pyinstaller打包
playwright断点使用
在运行selenium脚本的时候,我们通常习惯用sleep去让页面暂停 ,去定位元素,
playwright 的 page.pause() 断点功能出现,让打开可以愉快的在页面上调试了,我们甚至可以 直接使用 playwright.$(selector) 直接支持playwright选择器的方法查询。
例如:
playwright.$('#username')通过id定位
playwright.$('text=用户名'),文本模糊查询
<input class="required username" id="username" size="25" tabindex="1" type="text" placeholder="用户名" accesskey="n" autocomplete="off" name="username" value>
page.pause() # 断点
运行后会弹出 playwright inspector 工具
使用 pick locator点击后,在页面上点击获取定位元素
窗口最大化设置
playwright 默认启动的浏览器窗口大小是1280x720, 我们可以通过设置no_viewport参数来禁用
固定的窗口大小 ,no_viewport 禁用窗口大小
第一种
设置args参数--start-maximized 并且设置no_viewport=True
from time import sleep
from playwright.sync_api import sync_playwright
with sync_playwright() as driver:
browser=driver.chromium.launch(headless=False,args=['--start-maximized'])
context=browser.new_context(no_viewport=True)
page=context.new_page()
解释:在 Playwright 中,browser 对象代表整个浏览器,而context 对象代表一个浏览器上下文。通常情况下,每个浏览器只有一个默认上下文,但是可以通过 browser.new_context() 方法创建多个上下文,每个上下文之间相互隔离,拥有自己的 cookies、缓存和身份验证信息等。
在你提供的代码中,通过 browser.new_context(no_viewport=True) 方法创建了一个没有视口的浏览器上下文,即不会显示实际的浏览器窗口,适合一些不需要展示的自动化场景。
第二种,通过viewport={'width': 1920, 'height': 1080}指定窗口大小
from time import sleep
from playwright.sync_api import sync_playwright
with sync_playwright() as driver:
browser=driver.chromium.launch(headless=False)
context=browser.new_context(viewport={'width': 1920, 'height': 1080})
page=context.new_page()
启动本地浏览器和edge浏览器
使用 playwright install 命令默认会安装chromium,firefox 和 webkit 三个浏览器。 可以通过 playwright -h 命令查看目前支持的浏览器
playwright install --help
从命令行帮助信息中可以看到支持的浏览器有:chromium, chrome, chrome-beta, msedge,
msedge-beta, msedge-dev, firefox, webkit

本地安装上面的浏览器,安装过就不会安装。
playwright install chrome
playwright install msedge
安装完如下图显示版本,桌面查看。

可以先关闭正在运行的chrome 浏览器,使用以下命令安装到最新版
playwright install --force chrome
channel 指定打开浏览器
Google Chrome 和 Microsoft Edge浏览器都是用的 chromium 内核,所以只需加一
个channel="chrome" 即可打开本地谷歌浏览器
加载本地缓存访问
设置 USER_DIR_PATH ,获取方式在浏览器里面输入
chrome://version
from playwright.sync_api import sync_playwright
import getpass
USER_DIR_PATH = f"/Users/{getpass.getuser()}/Library/Application Support/Google/Chrome/Default"
print(USER_DIR_PATH)
with sync_playwright() as driver:
browser=driver.chromium.launch_persistent_context(
# 指定本机用户缓存地址
user_data_dir=USER_DIR_PATH,
# 设置 GUI 模式
headless=False
# 接收下载事件
,accept_downloads=True
page=browser.new_page()
page.goto('https://zhuanlan.zhihu.com/p/628604629/edit')
page.pause()
操作已打开的浏览器,绕过验证码登录
1首先配置chrome的环境变量。
2, 参数理解
• --remote-debugging-port是指定运行端口,只要没被占用就行
• --user-data-dir指定运行浏览器的运行数据,新建一个干净目录,不影响系统原来的 数据
• --incognito隐私模式打开
• -–start-maximized:窗口最大化
• --new-window:直接打开网址
wind,找到图标右击,找到快捷方式复制地址,在环境变量path里面配置。
打开cmd输入命令启动chrome浏览器
chrome.exe --remote-debugging-port=1234 --user-data-dir="D:\playwright_chrome"
mac 电脑直接配置 export PATH="/Applications/Google\ Chrome.app/Contents/MacOS ":$PAT
终端输入
Google\ Chrome --remote-debugging-port=1234 --user-data-dir=/Users/smzdm/Desktop/chromeData

然后使用 playwright 接管页面
当页面打开后,可以使用connect_over_cdp()方法接管前面已经打开的浏览器,获取到context 上下文,通过上下文再获取到page对象
from playwright.sync_api import sync_playwright
with sync_playwright() as diver:
browser=diver.chromium.connect_over_cdp('http://localhost:1234')
page=browser.contexts[0].pages[0]
print(page.url)
print(page.title())
page.get_by_text('全部需求').click()
操作滑块
操作滑块,需用到mouse 方法
• mouse.move()起点或终点坐标位置
• mouse.down()按住鼠标
• mouse.up()释放鼠标
前端滑块脚本
<!DOCTYPE html>
<meta charset="UTF-8">
<title>滑动解锁</title>
<style>
.slider {
position: relative;
width: 300px;
height: 50px;
background-color: #f0f0f0;
border-radius: 25px;
margin: 50px auto;
.slider-bg {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: #fff;
border-radius: 25px;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
.slider-knob {
position: absolute;
top: 0;
left: 0;
width: 50px;
height: 50px;
background-color: #fff;
border-radius: 50%;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
cursor: pointer;
</style>
</head>
<div class="slider">
<div class="slider-bg"></div>
<div class="slider-knob"></div>
<script>
var slider = document.querySelector('.slider');
var knob = document.querySelector('.slider-knob');
var bg = document.querySelector('.slider-bg');
var distance = bg.offsetWidth - knob.offsetWidth;
var isDragging = false;
var startX = 0;
knob.addEventListener('mousedown', function(e) {
isDragging = true;
startX = e.clientX;
document.addEventListener('mousemove', function(e) {
if (isDragging) {
var offsetX = e.clientX - startX;
var x = Math.min(Math.max(0, offsetX), distance);
knob.style.left = x + 'px';
document.addEventListener('mouseup', function(e) {
if (isDragging) {
var offsetX = e.clientX - startX;
var x = Math.min(Math.max(0, offsetX), distance);
if (x === distance) {
alert('验证通过');
} else {
knob.style.left = 0;
isDragging = false;
</script>
</body>
</html>
编写滑动脚本
from playwright.sync_api import sync_playwright
with sync_playwright() as dirver:
browser=dirver.chromium.launch(headless=False)
page=browser.new_page()
page.goto('file:///Users/smzdm/automate/Play_wright/learn/case.html')
slider = page.locator('.slider-knob').bounding_box()
page.mouse.move(x=slider['x']+slider['width']/2,y=slider['y']+slider['height']/2)
page.mouse.down()
page.mouse.move(x=slider['x']+slider['width']/2+250,y=slider['y']+slider['height']/2)
page.mouse.up()
page.pause()
bounding_box 获取元素的x ,y坐标, 250移动的多少px
图片验证码识别
首先安装第三方识别验证码库,使用pip安装
ddddocr
库:
pip install ddddocr
调试验证是否可以识别验证码测试代码
import ddddocr
ocr=ddddocr.DdddOcr(show_ad=False)
with open("img.png",'rb') as f:
img_bytes=f.read()
yzm=ocr.classification(img_bytes)
print(yzm)
1,创建一个DdddOcr对象:
2,打开一个图片文件这个语句将打开一个名为img.png的图片文件,并将其读取为二进制数据
3,使用DdddOcr对象的classification方法进行OCR识别:
playwright自动化脚本编写
import ddddocr
ocr=ddddocr.DdddOcr(show_ad=False)
# with open("img.png",'rb') as f:
# img_bytes=f.read()
# yzm=ocr.classification(img_bytes)
# print(yzm)
from playwright.sync_api import sync_playwright
with sync_playwright() as driver:
brower=driver.chromium.launch(headless=False)
page=brower.new_page()
page.goto('https://www.zhidemai.com/contact/#media')
img_bytes=page.locator('canvas#code').screenshot()#变量储存二进制数据
yzm = ocr.classification(img_bytes)直接识别
print(yzm)
page.locator('//div[@class="wrap"]/div[@class="media"][2]//input[@placeholder="请输入验证码"]').fill(yzm)
page.pause()

Pyinstaller 打包生成独立可执行文件
安装Pyinstaller
pip3 install pyinstaller
playwright 与 Pyinstaller 结合使用来创建独立的可执行文件
https://
playwright.dev/docs/int
ro
playwright官网
将浏览器与可执行文件捆绑在一起
设置参数 PLAYWRIGHT_BROWSERS_PATH 默认设置为 0,意思是安装到site-packages下的 , playwright目录 当然你也可以设置成其他位置,比如你指定安装到你代码的跟目录,得使用路径的绝对路径
window电脑设置
set PLAYWRIGHT_BROWSERS_PATH=0