主题
浏览器自动化工具入门✅
在 Python 领域,浏览器自动化是一项重要而且广泛应用的技术,用于模拟用户在浏览器中的操作。这种技术对于 Web 开发、测试和数据爬取等任务非常有用,最重要的是,可以满足我们完成在浏览器中的自动化需求。在本讲义中,我将介绍三种常见的 Python 浏览器自动化工具:Playwright、Selenium 和 Splinter,了解它们的优缺点、使用方法。
1. Playwright
Python playwright 是一种用于进行 Web 自动化测试、数据抓取和任务自动化的工具。它可以让您用 Python 代码来控制浏览器,模拟人的操作,实现各种功能。
要使用 Python playwright,您需要做以下几个步骤:
- 安装 playwright 库。您可以使用 pip 命令来安装,如
pip install playwright。 - 安装 Chromium、Firefox、WebKit 等浏览器的驱动文件。您可以使用
python -m playwright install命令来一键安装所有的浏览器驱动。如何要安装 chromium,可以执行python -m playwright install chromium。 - 导入 playwright 库,并创建浏览器对象和页面对象。您可以使用
playwright.sync_playwright()或playwright.async_playwright()来创建同步或异步的上下文管理器,然后使用p.chromium.launch()、p.firefox.launch()或p.webkit.launch()来启动不同的浏览器,再使用browser.newPage()来创建一个新的页面对象。 - 使用页面对象的方法来操作浏览器。您可以使用一些常用的方法,如:
page.goto(url):打开指定的网页,如page.goto("http://www.baidu.com")。page.click(selector):点击网页中的元素,如page.click("text=百度一下")。page.fill(selector, value):向文本框输入文本,如page.fill("#kw", "playwright")。page.screenshot(path):截取网页的屏幕,如page.screenshot(path="example.png")。page.evaluate(expression):在网页中执行 JavaScript 代码,如page.evaluate("document.title")。page.route(url, handler):拦截网页中的网络请求,如page.route("**/*", lambda route: route.abort())。page.close():关闭网页。browser.close():关闭浏览器。
这里是一个简单的例子,用 Python playwright 来打开百度,搜索 playwright,并截取网页的屏幕:
python
# 导入 playwright 库
from playwright import sync_playwright
# 创建同步的上下文管理器
with sync_playwright() as p:
# 启动 Chromium 浏览器
browser = p.chromium.launch()
# 创建一个新的页面对象
page = browser.newPage()
# 打开百度网页
page.goto("http://www.baidu.com")
# 向搜索框输入 playwright
page.fill("#kw", "playwright")
# 点击搜索按钮
page.click("#su")
# 等待搜索结果出现
page.waitForSelector("text=Playwright")
# 截取网页的屏幕
page.screenshot(path="example.png")
# 关闭浏览器
browser.close()如果想了解更多关于 Python playwright 的知识,可以参考以下的网页:
- 官方文档
- 自动化神器Playwright快速上手指南 - 知乎
- 下一代自动化工具Playwright教程 - 简介 -安装,新一代爬虫利器!_哔哩哔哩_bilibili
- Python Playwright 基本使用(步骤详细) - 阿里云开发者社区
- Python如何爬虫?玩转新一代爬虫神器Playwright! - 知乎
优点:
- 支持多浏览器: Playwright 支持 Chromium、Firefox 和 WebKit,使得你可以在不同的浏览器上进行自动化操作。
- 强大的 API: 提供了丰富的 API,支持多种浏览器特有的功能,如截图、录屏、网络拦截等。
- 速度快: Playwright 在执行自动化操作时表现出色,相对于其他工具更为高效。
- 微软出品,大厂保障 Playwright 是微软开源的工具,生态较好,遇到问题基本可以通过搜索解决。
缺点:
- 学习曲线: 对于初学者来说,Playwright 的学习曲线可能相对较陡峭。
- 相对较新: 相对于 Selenium,Playwright 是一个相对较新的工具,可能在一些特定情况下缺乏一些社区支持。
使用方法:
python
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto('https://example.com')
# 进行自动化操作
browser.close()2. Selenium
selenium 是一种用于进行 Web 自动化测试、数据抓取和任务自动化的工具。它可以让您用 Python 代码来控制浏览器,模拟人的操作,实现各种功能。
优点:
- 广泛应用: Selenium 是最古老和最广泛应用的浏览器自动化工具之一,有庞大的社区支持。
- 多语言支持: Selenium 支持多种编程语言,包括 Python、Java、C# 等。
缺点:
- 相对慢: 与 Playwright 相比,Selenium 的执行速度可能较慢。
- 不支持一些浏览器特性: 在某些方面,Selenium 可能无法直接支持一些浏览器的特定功能。
- 浏览器更新后,对应的驱动版本也要升级,比较繁琐。
使用方法:
要使用 Python selenium,您需要做以下几个步骤:
安装 selenium 库。您可以使用 pip 命令来安装,如
pip install selenium。下载浏览器驱动。您需要根据您使用的浏览器,下载对应的驱动程序,并放在系统路径中,或者在代码中指定驱动的位置。驱动程序要和电脑的浏览器版本保持对应。常用的浏览器驱动有:
- Firefox浏览器驱动: geckodriver
- Chrome浏览器驱动: chromedriver
- IE浏览器驱动: IEDriverServer
- Edge浏览器驱动: MicrosoftWebDriver
- Opera浏览器驱动: operadriver
- PhantomJS浏览器驱动: phantomjs
导入 selenium 库,并创建 webdriver 对象。您可以使用 webdriver 类来创建不同的浏览器对象,如
driver = webdriver.Chrome(),这样就可以启动 Chrome 浏览器了。使用 webdriver 对象的方法来操作浏览器。您可以使用一些常用的方法,如:
driver.get(url):打开指定的网页,如driver.get("http://www.baidu.com")。driver.find_element_by_*(locator):根据不同的定位方式,找到网页中的元素,如driver.find_element_by_id("kw")。element.send_keys(text):向文本框输入文本,如element.send_keys("selenium")。element.click():点击元素,如element.click()。element.get_attribute(name):获取元素的属性值,如element.get_attribute("href")。driver.back():浏览器后退。driver.forward():浏览器前进。driver.refresh():刷新网页。driver.quit():关闭浏览器并退出驱动程序。
这里是一个简单的例子,用 Python selenium 来打开百度,搜索 selenium,并获取搜索结果的标题和链接:
python
# 导入 selenium 库
from selenium import webdriver
# 创建 Chrome 浏览器对象
driver = webdriver.Chrome()
# 打开百度网页
driver.get("http://www.baidu.com")
# 找到搜索框元素
search_box = driver.find_element_by_id("kw")
# 输入 selenium
search_box.send_keys("selenium")
# 找到搜索按钮元素
search_button = driver.find_element_by_id("su")
# 点击搜索按钮
search_button.click()
# 找到所有搜索结果的标题元素
titles = driver.find_elements_by_xpath("//h3[@class='t']/a")
# 遍历标题元素
for title in titles:
# 获取标题文本
text = title.text
# 获取标题链接
link = title.get_attribute("href")
# 打印标题和链接
print(text, link)
# 关闭浏览器并退出驱动程序
driver.quit()如果您想了解更多关于 Python selenium 的知识,您可以参考以下的网页:
- 官方文档
- Selenium Python 教程 - 知乎
- 2021-Python-Selenium基础教程_哔哩哔哩_bilibili
- selenium入门超详细教程——网页自动化操作-CSDN博客
- Python + Selenium,分分钟搭建 Web 自动化测试框架! - 知乎
3. Splinter
可以理解为 Splinter 是一个封装了 selenium 的工具。
优点:
- 简单易用: Splinter 是一个简化了 Selenium 的高层封装,使得它更易于使用。
- 支持多种浏览器: 同样支持多种浏览器。
缺点:
- 功能相对较少: 与 Playwright 和 Selenium 相比,Splinter 的功能相对较少。
使用方法:
要使用 Python splinter,您需要做以下几个步骤:
- 安装 splinter 库。您可以使用 pip 命令来安装,如
pip install splinter。 - 安装浏览器驱动。您需要根据您使用的浏览器,下载对应的驱动程序,并放在系统路径中,或者在代码中指定驱动的位置,同 selenium。常用的浏览器驱动有:
- Chrome浏览器驱动: chromedriver
- Firefox浏览器驱动: geckodriver
- IE浏览器驱动: IEDriverServer
- Edge浏览器驱动: MicrosoftWebDriver
- PhantomJS浏览器驱动: phantomjs
- 导入 splinter 库,并创建 browser 对象。您可以使用
Browser()函数来创建不同的浏览器对象,如browser = Browser(),这样就可以启动 Firefox 浏览器了。如果您想使用其他浏览器,可以指定 driver_name 参数,如browser = Browser(driver_name='chrome'),这样就可以启动 Chrome 浏览器了。 - 使用 browser 对象的方法来操作浏览器。您可以使用一些常用的方法,如:
browser.visit(url):打开指定的网页,如browser.visit("http://www.baidu.com")。browser.find_by_*(locator):根据不同的定位方式,找到网页中的元素,如browser.find_by_id("kw")。element.send_keys(text):向文本框输入文本,如element.send_keys("splinter")。element.click():点击元素,如element.click()。browser.is_text_present(text):判断网页中是否存在指定的文本,如browser.is_text_present("splinter.readthedocs")。browser.quit():关闭浏览器并退出驱动程序。
这里是一个简单的例子,用 Python splinter 来打开百度,搜索 splinter,并判断搜索结果中是否有 Splinter 官方网站:
python
# 导入 splinter 库
from splinter import Browser
# 创建 Chrome 浏览器对象
browser = Browser(driver_name='chrome')
# 打开百度网页
browser.visit("http://www.baidu.com")
# 找到搜索框元素
search_box = browser.find_by_id("kw")
# 输入 splinter
search_box.send_keys("splinter")
# 找到搜索按钮元素
search_button = browser.find_by_id("su")
# 点击搜索按钮
search_button.click()
# 判断搜索结果中是否有 Splinter 官方网站
if browser.is_text_present("splinter.readthedocs"):
print("Yes, found it! :)")
else:
print("No, didn't find it :(")
# 关闭浏览器并退出驱动程序
browser.quit()如果想了解更多关于 Python splinter 的知识,可以参考以下的网页:
我的推荐
目前,常用的浏览器自动化工具有 playwright、selenium 和 splinter。它们各有优缺点,但是我认为 playwright 是最好的选择,原因如下:
- playwright 支持所有流行的浏览器,包括 Chromium、Firefox、WebKit 等,而且只需要一次安装,不需要额外的驱动文件。
- playwright 速度更快,更可靠的执行。它使用 API 方式操作浏览器内核,不需要通过网络通信,而且可以和浏览器双向沟通,元素操作可以在元素 ready 的情况下进行,避免了等待和超时的问题。
- playwright 更强大的自动化测试配置。它可以支持 UI 和非 UI 方式运行,节省了 debug 和 run 时间,而且提供了更好的错误诊断和调试功能。
- playwright 强大的工具库。它提供了一些实用的工具,如 Codegen、Playwright inspector 和 Trace Viewer,可以帮助您快速生成、执行和分析测试代码。
综上所述,playwright 是一款简单方便、功能强大、稳定性高的浏览器自动化工具,相比于 selenium 和 splinter,它有着明显的优势,值得尝试。
练习题目
尝试自己编写代码,然后和答案进行对比,看看有没有不同的思路或方法。
使用 playwright 打开百度,搜索 "Python",并打印出搜索结果的标题和链接。
使用 playwright 打开豆瓣,登录自己的账号,然后给自己最喜欢的电影评分和评论。