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 为示例:
# 使用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)