Python的Playwright

APIplaywright官网

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>

Python的Playwright(一)

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的详细方法介绍 >>

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值