目录
基本使用
浏览器调用
启用浏览器
创建窗口对象
访问URL
页面的刷新、返回、前进
关闭
截图、录屏、保存pdf
截图
录屏
保存为pdf
设置窗口大小
调试模式
手机模式及new_context的更多参数
手机模式
new_context的其他参数
设置语言和时区
设置和修改位置
用户代理设置
离线模式
禁用或启用java_script_enabled
playwright是一个非常强大的自动化框架,支持Linux、Mac以及Windows操作系统操作,支持Chromium、Firefox、WebKit等主流浏览器自动化操作。
官网:https://playwright.dev/
安装playwright框架:pip install playwright
安装浏览器驱动:playwright install ,可指定对应浏览器安装,如playwright install Chromium,不指定时安装默认的Chromium、Firefox、Webkit,自动化运行需要在对应浏览器和驱动下使用,不安装无法运行脚本。
基本使用
浏览器调用
from playwright.sync_api import sync_playwright
from time import sleepwith sync_playwright() as p:# wd = p.firefox# wd = p.chromium# wd = p.webkit
启用浏览器
headless:指定有头或无头模式(显示或隐藏浏览器界面运行脚本)
with sync_playwright() as p:browser = p.chromium.launch(headless=False)
创建窗口对象
page = browser.new_page()
访问URL
page.goto('https://www.baidu.com')
页面的刷新、返回、前进
page.reload() # 刷新页面,支持timeout和wait_until参数page.go_back() # 回退,支持timeout和wait_until参数page.go_forward() # 前进,支持timeout和wait_until参数
关闭
page.close() # 关闭页面browser.close() # 关闭浏览器
截图、录屏、保存pdf
截图
支持设置截图的前景背景大小等参数,见源码
截取整个页面
page.screenshot(path='screenshot.png', full_page=True) # 设置截取整页full_page
截取某个元素
img = page.locator('#kw')img.screenshot(path=f'input_box.png')
录屏
with sync_playwright() as p:browser = p.chromium.launch(headless=True) context = browser.new_context(record_video_dir="videos/", # 录屏保存文件保存位置record_video_size={'width': 1920, 'height': 1080} # 设置录屏像素,不设置时会发现录下来的视频很模糊)page = context.new_page()
record_video_size参数的设置关键性,不设置时录屏内容很糊(可解决playwright录屏内容模糊的问题),设置和不设置的效果对比如下
保存为pdf
page.pdf(path='page.pdf')
设置窗口大小
窗口最大化设置
方法一:
增加args参数和no_viewport参数
args=['--start-maximized']设置启动窗口最大化,传递给浏览器实例“最大化”参数项,args参数设置项非常丰富:https://peter.sh/experiments/chromium-command-line-switches/
with sync_playwright() as p:browser = p.chromium.launch(headless=False, args=['--start-maximized'])context = browser.new_context(no_viewport=True # 禁用窗口大小)page = context.new_page()
方法二:
支持自由大小设置
context = browser.new_context(viewport={'width': 1920, 'height': 1080}, # 设置窗口大小)page = context.new_page()
方法三:
支持自由大小设置
page.set_viewport_size({'width': 1920, 'height': 1080}) # 设置窗口大小
方法二和方法三效果相同,一个在创建窗体前,一个在创建窗体后。
方法一必须是headless=False时生效(即显示模式下),方法二三不受headless限制,均生效。
方法一截图操作的图片高度偏小,方法二三截图操作的图片分辨率和代码中设置的一致。
方法一截图时保持屏幕的缩放比例,方法二三按屏幕缩放比例固定为100%时进行截图。
调试模式
with sync_playwright() as p:browser = p.chromium.launch(headless=False, slow_mo=1000) # slow_mo:慢动作模式,用于调试模式context = browser.new_context(record_har_path="debug.har") # 保存调试追踪,page.pause()开启调试模式后可见效果page = context.new_page()page.pause() # 开启调试模式
手机模式及new_context的更多参数
手机模式
iphone = p.devices['iPhone 13 Pro']context = browser.new_context(**iphone, # 添加设备)
new_context的其他参数
设置语言和时区
locale='zh-CN', # 设置语言
timezone_id='Asia/Shanghai', # 设置时区为上海
将locale='de-DE'设置为德语后,访问https://bing.com/会发现页面语言变为德语
设置和修改位置
可访问百度地图看看效果哦
context = browser.new_context(
geolocation={'longitude': 120.756379, 'latitude': 30.783679},
permissions=['geolocation']
)context.set_geolocation({'longitude': 121.09213, 'latitude': 32.010647})
用户代理设置
user_agent=' xxx test user agent'
离线模式
offline=True
禁用或启用java_script_enabled
java_script_enabled=False