PlaywrightSelenium如何选择及示例

2023-05-15 14:57:34 浏览数 (3)

亿牛云代理亿牛云代理

Playwright和Selenium都是用于Web UI自动化测试的工具,但是它们有一些不同的特点和功能。

  • Playwright是由微软开发的一个较新的框架,它使用websockt协议来操作浏览器内核,可以实时获取页面状态,也可以和浏览器双向沟通。它支持多种语言(TypeScript、JavaScript、Python、.NET、Java),多种浏览器(Chromium、WebKit和Firefox),并且可以在Windows、Linux和Mac上运行。它不需要下载浏览器驱动,可以通过命令行安装浏览器,并且启动速度很快。它还提供了一些高级的功能,比如context环境隔离、headless无头模式、无痕模式、wait_for_load_state精准等待、多种内置定位器、元素状态智能判断、iframe对象操作、alert异步监听、文件上传下载处理、多窗口标签监听、事件监听、捕获ajax请求、mock功能、expect断言、录制视频、trace追踪、断点调试等。它还可以生成pytest用例,也可以进行接口测试。总之,Playwright是一个简单方便、功能强大、稳定性高的工具。
  • Selenium是一个出现较早的工具,它使用http协议来自动化Web浏览器,允许开发人员编写与网页和元素交互的测试。它支持更多的语言(C#,Java,Perl,PHP,Python 和Ruby),更多的浏览器(IE(7, 8, 9, 10, 11),Firefox,Safari,Google Chrome,Opera,Edge等),并且也可以在Windows,Linux,Mac上运行。但是它需要下载对应版本的浏览器驱动,并且启动速度较慢。它没有提供像Playwright那样的高级功能,而是需要开发人员自己封装或者导入其他模块来实现。比如元素等待、点击元素等操作、定位报错、元素不在当前屏幕、iframe切换、alert处理、文件上传下载处理、多窗口标签切换、执行JavaScript等。它也没有提供录制视频、trace追踪、断点调试等功能。它只能获取当时的页面状态,不能实时监听或者模拟接口数据。总之,Selenium是一个灵活性高、用户群体大、学习资料多的工具。

根据以上的介绍,我们可以看出Playwright和Selenium各有优缺点。

  • Playwright的优点是简单方便、功能强大、稳定性高,缺点是相对新,用户群体少,学习资料少。
  • Selenium的优点是灵活性高、用户群体大、学习资料多,缺点是需要自己封装或者导入其他模块来实现一些功能,启动速度慢,稳定性差。

所以,在选择使用哪个工具的时候,需要根据自己的需求和情况来决定。如果你想要快速上手一个简单方便且功能强大的工具,那么Playwright可能更适合你。下面以python使用Playwright采集航班信息https://www.luckyair.net 为示例:

代码语言:python代码运行次数:0复制
# 使用playwright.chromium
from playwright.sync_api import sync_playwright

# 设置亿牛云(动态转发隧道代理)爬虫代理加强版 代理IP的用户名和密码
proxy_username = "16IP"
proxy_password = "16YUN"

with sync_playwright() as p:
    # 启动chromium浏览器,并设置代理
    browser = p.chromium.launch(proxy={"server": f"http://{proxy_username}:{proxy_password}@your_proxy_ip:your_proxy_port"})

    # 启动 Chromium
    browser = p.chromium.launch()

    # 设置亿牛云(动态转发隧道代理)爬虫代理加强版 代理IP的服务器
    context = browser.new_context(proxy={
        "server": "http://www.16yun.cn:31000",
        "username": proxy_username,
        "password": proxy_password
    })
    
    # 创建一个新页面
    page = context.new_page()
    # 访问网站 https://www.luckyair.net
    page.goto("https://www.luckyair.net")
    # 等待页面加载完成
    page.wait_for_load_state("networkidle")
    # 获取特价机票信息的元素列表
    tickets = page.query_selector_all(".special-ticket-item")
    # 创建一个空列表,用于存储特价机票信息
    data = []
    # 遍历每个元素,获取相关信息
    for ticket in tickets:
        # 获取出发地、目的地、价格、日期等信息
        departure = ticket.query_selector(".departure").inner_text()
        destination = ticket.query_selector(".destination").inner_text()
        price = ticket.query_selector(".price").inner_text()
        date = ticket.query_selector(".date").inner_text()
        # 将信息存入字典中
        info = {
            "departure": departure,
            "destination": destination,
            "price": price,
            "date": date
        }
        # 将字典添加到列表中
        data.append(info)
    # 关闭浏览器
    browser.close()

# 进行整理统计
# 导入pandas模块,用于数据分析
import pandas as pd

# 将列表转换为DataFrame对象
df = pd.DataFrame(data)
# 打印DataFrame对象
print(df)
# 按照价格升序排序
df.sort_values(by="price", inplace=True)
# 打印排序后的DataFrame对象
print(df)
# 统计每个出发地的特价机票数量
count = df.groupby("departure").size()
# 打印统计结果
print(count)

0 人点赞