API:playwright官网
Playwright 模块提供了一种启动浏览器实例的方法。以下是使用 Playwright 驱动自动化的典型示例:
from playwright.sync_api import sync_playwright
def run(playwright):
chromium = playwright.chromium # or "firefox" or "webkit".
browser = chromium.launch()
page = browser.new_page()
page.goto("http://example.com")
# other actions...
browser.close()
with sync_playwright() as playwright:
run(playwright)
- playwright(sp).stop()
sp.stop()
终止 Playwright 实例,以防它绕过 Python 上下文管理器创建,也就是保证不让其他人/其他代码用此context
,比如在交互模式中
>>> from playwright.sync_api import sync_playwright
>>> sp = sync_playwright().start()
>>> browser = sp.chromium.launch()
>>> page = browser.new_page()
>>> page.goto("http://whatsmyuseragent.org/")
>>> page.screenshot(path="example.png")
>>> browser.close()
>>> sp.stop()
- sp.chromium(firefox/webkit)
sp.chromium
这个很明显就是创建浏览器实例
sp = sync_playwright().start()
chromium = sp.chromium
print(chromium) # <BrowserType name=chromium executable_path=/Users/.../Chromium.app/Contents/MacOS/Chromium>
- sp.device
sp.device
返回要与browser.new_context(**kwargs)或browser.new_page(**kwargs)一起使用的设备字典,用于仿真,可以根据需要更改参数(例如,重新设置viewport)
sp = sync_playwright().start()
d_name = sp.device
print(d_name) # 由于设备很多,所以只列举了一个实例:{'Blackberry PlayBook': {'user_agent': 'Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/15.0 Safari/536.2+', 'viewport': {'width': 600, 'height': 1024}, 'device_scale_factor': 1, 'is_mobile': True, 'has_touch': True},...}
- sp.selectors
sp.selectors
元素选择器指向页面中元素的字符串
<playwright._impl._selectors.Selectors object at 0x7fd191b8a7c0>
Accessibility类
检查 Chromium 的可访问性树的方法,可以通过代码理解
from playwright.sync_api import sync_playwright
def find_focused_node(node):
if (node.get("focused")):
return node
for child in (node.get("children") or []):
# 可以根据需要删选节点
found_node = child['role']
node_value = child['name']
yield found_node, node_value
return None
with sync_playwright() as sp:
browser = sp.chromium.launch()
context = browser.new_context()
page = context.new_page()
# 代码实现
page.goto('http://www.bilibili.com')
sn = page.accessibility.snapshot()
for node, name in find_focused_node(sn):
print(node, name)
context.close()
browser.close()
Browser实例
from playwright.sync_api import sync_playwright
def run(playwright):
webkit = playwright.webkit
browser = webkit.launch()
page = browser.new_page()
page.goto("https://example.com")
browser.close()
with sync_playwright() as playwright:
run(playwright)
browser.on()
: 监控浏览器和浏览器应用程序的是否正常连接,例:
browser.on('disconnected',lambda :print('断开连接'))
当浏览器/应用程序崩溃时,或browser.close()
被调用时触发
browser.close()
: 清除所有创建的属于此浏览器的上下文并断开与浏览器服务器的连接。
browser.contexts
: 返回所有打开的浏览器上下文的数组,里面包含BrowserContext对象
browser.is_connected()
: 判断浏览器是否连接
browser.new_context()
: 浏览器上下文,用于记录浏览器的历史操作,也就是浏览器的操作环境,简单介绍常用的参数:
- base_url: page对象使用url参数时,会和base_url共同构建请求目标url
context = browser.new_context(base_url='http://www.baidu.com')
page = context.new_page()
page.goto('/s?wd=playwright')
print(page.url) # http://www.baidu.com/s?wd=playwright
- color_scheme: 设置浏览器的主题颜色,不过我在基于chrome的context中设置之后发现没什么卵用,可以尝试firefox浏览器
- device_scale_factor: 设备比例因子/设备像素比
- http_credentials: 用于http身份验证
- offline: 让网络处于离线状态,设置为True之后,比如正常请求百度,会报
Error: net::ERR_INTERNET_DISCONNECTED
- proxy: 网络代理设置
- record_video_dir: 录制浏览器操作过程,调用context.close()以保存视频
- storage_state: 用于加载本地的存储文件并填充上下文
browser.new_page()
: 创建一个页面对象,适用于单页面测试用例,一般会使用browser.new_context(**kwargs)
后跟browser_context.new_page()
来控制page的生命周期
browser.start
: 参考BrowserContext.tracing.start(),用来跟踪页面并记录快照/屏幕截图,并用playwright trace viewer工具进行查看/分析
context.tracing.start(snapshots=True,screenshots=True)
page = context.new_page()
# 代码实现
page.goto('http://www.bilibili.com')
context.tracing.stop(path='trace.zip')
terminal里使用playwright show-trace trace.zip
命令打开playwright trace viewer窗口
BrowserContext的详细方法介绍 >>