Skip to content

浏览器自动化工具入门✅

在 Python 领域,浏览器自动化是一项重要而且广泛应用的技术,用于模拟用户在浏览器中的操作。这种技术对于 Web 开发、测试和数据爬取等任务非常有用,最重要的是,可以满足我们完成在浏览器中的自动化需求。在本讲义中,我将介绍三种常见的 Python 浏览器自动化工具:Playwright、Selenium 和 Splinter,了解它们的优缺点、使用方法。

1. Playwright

Python playwright 是一种用于进行 Web 自动化测试、数据抓取和任务自动化的工具。它可以让您用 Python 代码来控制浏览器,模拟人的操作,实现各种功能。

要使用 Python playwright,您需要做以下几个步骤:

  1. 安装 playwright 库。您可以使用 pip 命令来安装,如 pip install playwright
  2. 安装 Chromium、Firefox、WebKit 等浏览器的驱动文件。您可以使用 python -m playwright install 命令来一键安装所有的浏览器驱动。如何要安装 chromium,可以执行 python -m playwright install chromium
  3. 导入 playwright 库,并创建浏览器对象和页面对象。您可以使用 playwright.sync_playwright()playwright.async_playwright() 来创建同步或异步的上下文管理器,然后使用 p.chromium.launch()p.firefox.launch()p.webkit.launch() 来启动不同的浏览器,再使用 browser.newPage() 来创建一个新的页面对象。
  4. 使用页面对象的方法来操作浏览器。您可以使用一些常用的方法,如:
    • 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 支持 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,您需要做以下几个步骤:

  1. 安装 selenium 库。您可以使用 pip 命令来安装,如 pip install selenium

  2. 下载浏览器驱动。您需要根据您使用的浏览器,下载对应的驱动程序,并放在系统路径中,或者在代码中指定驱动的位置。驱动程序要和电脑的浏览器版本保持对应。常用的浏览器驱动有:

    • Firefox浏览器驱动: geckodriver
    • Chrome浏览器驱动: chromedriver
    • IE浏览器驱动: IEDriverServer
    • Edge浏览器驱动: MicrosoftWebDriver
    • Opera浏览器驱动: operadriver
    • PhantomJS浏览器驱动: phantomjs
  3. 导入 selenium 库,并创建 webdriver 对象。您可以使用 webdriver 类来创建不同的浏览器对象,如 driver = webdriver.Chrome(),这样就可以启动 Chrome 浏览器了。

  4. 使用 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 的知识,您可以参考以下的网页:

3. Splinter

可以理解为 Splinter 是一个封装了 selenium 的工具。

优点:

  • 简单易用: Splinter 是一个简化了 Selenium 的高层封装,使得它更易于使用。
  • 支持多种浏览器: 同样支持多种浏览器。

缺点:

  • 功能相对较少: 与 Playwright 和 Selenium 相比,Splinter 的功能相对较少。

使用方法:

要使用 Python splinter,您需要做以下几个步骤:

  1. 安装 splinter 库。您可以使用 pip 命令来安装,如 pip install splinter
  2. 安装浏览器驱动。您需要根据您使用的浏览器,下载对应的驱动程序,并放在系统路径中,或者在代码中指定驱动的位置,同 selenium。常用的浏览器驱动有:
    • Chrome浏览器驱动: chromedriver
    • Firefox浏览器驱动: geckodriver
    • IE浏览器驱动: IEDriverServer
    • Edge浏览器驱动: MicrosoftWebDriver
    • PhantomJS浏览器驱动: phantomjs
  3. 导入 splinter 库,并创建 browser 对象。您可以使用 Browser() 函数来创建不同的浏览器对象,如 browser = Browser(),这样就可以启动 Firefox 浏览器了。如果您想使用其他浏览器,可以指定 driver_name 参数,如 browser = Browser(driver_name='chrome'),这样就可以启动 Chrome 浏览器了。
  4. 使用 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,它有着明显的优势,值得尝试。

练习题目

尝试自己编写代码,然后和答案进行对比,看看有没有不同的思路或方法。

  1. 使用 playwright 打开百度,搜索 "Python",并打印出搜索结果的标题和链接。

  2. 使用 playwright 打开豆瓣,登录自己的账号,然后给自己最喜欢的电影评分和评论。

参考答案