欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > 一文掌握DrissionPage的详细使用

一文掌握DrissionPage的详细使用

2025/9/22 17:59:25 来源:https://blog.csdn.net/cui_yonghua/article/details/145861578  浏览:    关键词:一文掌握DrissionPage的详细使用

文章目录

    • 1. 什么是DrissionPage?
    • 2. 安装 DrissionPage
    • 3. 基本使用
      • 3.1 初始化浏览器
      • 3.2 打开网页
      • 3.3 查找元素
      • 3.4 操作元素
      • 3.5 获取元素属性
      • 3.6 执行 JavaScript
      • 3.7 页面对象(Page Object)
      • 3.8 元素定位方式
      • 3.9 常用操作方法
      • 3.10 断言
    • 4. 高级功能
      • 4.1 处理弹窗
      • 4.2 切换 Frame
      • 4.3 等待元素
      • 4.4 截图
      • 4.5 数据驱动测试
    • 5. 实战示例
      • 5.1 自动登录
      • 5.2 数据抓取
      • 5.3 编写测试用例
    • 6. 最佳实践
      • 6.1 ​页面对象设计原则
      • 6.2 元素定位优化:
      • 6.3 ​异常处理:
      • 6.4 ​环境配置:
    • 7. 总结

1. 什么是DrissionPage?

DrissionPage 是一个基于 Python 的网页自动化工具,主要用于网页数据的抓取、自动化操作和测试。它结合了 Selenium 和 Requests 的优点,提供了更简洁、高效的 API,适用于各种网页自动化任务。

2. 安装 DrissionPage

在开始使用 DrissionPage 之前,需要先安装它。可以通过 pip 进行安装:pip install DrissionPage。然后创建项目目录并初始化配置文件:

mkdir drission_project
cd drission_project
drission init

初始化后会生成以下文件:

  • config.ini:配置文件(存放浏览器驱动路径、测试环境等)
  • pages/:页面对象目录
  • tests/:测试用例目录
  • utils/:工具类目录

3. 基本使用

3.1 初始化浏览器

DrissionPage 支持多种浏览器,包括 Chrome、Firefox 等。初始化浏览器的代码如下:

from DrissionPage import WebPage# 初始化 Chrome 浏览器
page = WebPage('chrome')

3.2 打开网页

使用 get() 方法可以打开指定的网页:

page.get('https://www.example.com')

3.3 查找元素

DrissionPage 提供了多种查找元素的方法,常用的有 ele() 和 eles():

  • ele():查找单个元素。
  • eles():查找多个元素。
# 查找单个元素
element = page.ele('#element-id')# 查找多个元素
elements = page.eles('.class-name')

3.4 操作元素

找到元素后,可以对其进行各种操作,如点击、输入文本等:

# 点击元素
element.click()# 输入文本
element.input('Hello, DrissionPage!')

3.5 获取元素属性

可以通过 attr() 方法获取元素的属性:

# 获取元素的 href 属性
href = element.attr('href')

3.6 执行 JavaScript

DrissionPage 允许直接执行 JavaScript 代码:

# 执行 JavaScript
page.run_js('alert("Hello, DrissionPage!");')

3.7 页面对象(Page Object)

每个 Web 页面对应一个 Python 类,封装页面元素和操作方法。

# pages/login_page.py
from drissionpage import Pageclass LoginPage(Page):def __init__(self, driver):super().__init__(driver)self.username_input = self.by_id("username")  # 定位元素self.password_input = self.by_id("password")self.login_button = self.by_id("login-btn")def login(self, username, password):self.username_input.send_keys(username)self.password_input.send_keys(password)self.login_button.click()

3.8 元素定位方式

支持多种定位策略:

定位方式语法
IDself.by_id(“element_id”)
Nameself.by_name(“name”)
XPathself.by_xpath(“//tag[@id]”)
CSS Selectorself.by_css(“div.class”)
Link Textself.by_link_text(“Link Text”)

3.9 常用操作方法

# 输入文本
self.username_input.send_keys("test_user")# 点击元素
self.login_button.click()# 获取文本
assert self.success_msg.text == "Login Success"# 切换窗口/标签页
self.switch_to.window(handle)# 执行 JavaScript
self.execute_script("window.scrollTo(0, document.body.scrollHeight);")

3.10 断言

集成 unittest 或 pytest 的断言方式:

from drissionpage import assert_# 验证元素是否存在
assert_.is_present(self.username_input)# 验证文本是否匹配
assert_.text_equals(self.login_button, "Login")

4. 高级功能

4.1 处理弹窗

DrissionPage 提供了处理弹窗的功能,可以轻松应对各种弹窗场景:

# 处理弹窗
page.handle_alert(accept=True)

4.2 切换 Frame

如果网页中有 iframe,可以使用 switch_to_frame() 方法切换到指定的 frame:

# 切换到 iframe
page.switch_to_frame('iframe-name')

4.3 等待元素

DrissionPage 提供了等待元素出现或消失的功能:

# 等待元素出现
page.wait_ele('#element-id')# 等待元素消失
page.wait_ele_disappear('#element-id')

4.4 截图

可以轻松地对网页进行截图:

# 截图并保存
page.screenshot('screenshot.png')

4.5 数据驱动测试

结合 CSV 或 Excel 文件实现多组数据测试:

# tests/test_login_dataDriven.py
import csv
from drissionpage import TestCase
from pages.login_page import LoginPageclass LoginTestCase(TestCase):@classmethoddef get_test_data(cls):data = []with open("testdata.csv") as f:reader = csv.DictReader(f)for row in reader:data.append((row["username"], row["password"]))return datadef test_login(self, username, password):self.open("http://example.com/login")login_page = LoginPage(self.driver)login_page.login(username, password)assert_.is_present(login_page.success_msg)

5. 实战示例

5.1 自动登录

以下是一个自动登录的示例:

from DrissionPage import WebPage# 初始化浏览器
page = WebPage('chrome')# 打开登录页面
page.get('https://www.example.com/login')# 输入用户名和密码
page.ele('#username').input('your-username')
page.ele('#password').input('your-password')# 点击登录按钮
page.ele('#login-button').click()# 等待登录成功
page.wait_ele('#welcome-message')# 截图保存
page.screenshot('login_success.png')

5.2 数据抓取

以下是一个简单的数据抓取示例:

from DrissionPage import WebPage# 初始化浏览器
page = WebPage('chrome')# 打开目标网页
page.get('https://www.example.com/data')# 获取所有数据项
data_items = page.eles('.data-item')# 遍历并打印数据
for item in data_items:print(item.text)# 关闭浏览器
page.quit()

若元素定位失败,则检查定位表达式是否正确。或者添加显式等待:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECelement = WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "username"))
)

5.3 编写测试用例

# tests/test_login.py
from drissionpage import TestCase
from pages.login_page import LoginPageclass LoginTestCase(TestCase):def test_valid_login(self):# 打开登录页面self.open("http://example.com/login")# 创建页面对象login_page = LoginPage(self.driver)# 执行登录操作login_page.login("test_user", "test_password")# 验证结果assert_.is_present(login_page.success_msg)assert_.text_equals(login_page.success_msg, "Login Success")

然后运行测试:drission run tests/test_login.py

6. 最佳实践

6.1 ​页面对象设计原则

  • 每个页面对应一个类,封装页面元素和操作。
  • 方法命名清晰(如 login()、submit_form())。

6.2 元素定位优化:

  • 避免使用易变动的属性(如 class 名称)。
  • 优先使用 ID 或 name,其次使用相对稳定的 XPath 或 CSS Selector。

6.3 ​异常处理:

try:self.login_button.click()
except NoSuchElementException:self.log_error("Login button not found")

6.4 ​环境配置:

使用 config.ini 管理不同环境(开发/生产)的 URL 和驱动路径。

7. 总结

DrissionPage 是一个功能强大且易于使用的网页自动化工具,适用于各种网页自动化任务。希望本文的 DrissionPage 的基本使用方法和一些高级功能能够帮助到你。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词