首页 / DrissionPage 入门教程 / 与 selenium 对比

DrissionPage 入门教程

与 selenium 对比

本教程共 42 篇 · 第 41 篇 · 更新于 2026-07-29 · 约 6 分钟阅读

DrissionPageDrissionPage 入门教程selenium对比迁移指南

41. 与 selenium 对比

本节目标:看看 DrissionPage 和 selenium 的差异,帮你决定是否值得切换。

代码量差距

同样一个操作,代码量差别很大。

显性等待查找元素

# selenium 写法:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.common.by import By

element = WebDriverWait(driver).until(
    ec.presence_of_element_located(
        (By.XPATH, '//*[contains(text(), "some text")]')
    )
)

# DrissionPage 写法:
element = tab('some text')

切换标签页

# selenium 写法:
driver.switch_to.window(driver.window_handles[0])

# DrissionPage 写法:
tab = browser.latest_tab

选择下拉列表

# selenium 写法:
from selenium.webdriver.support.select import Select

select_element = Select(element)
select_element.select_by_visible_text('text')

# DrissionPage 写法:
element.select('text')

拖拽元素

# selenium 写法:
from selenium.webdriver.common.action_chains import ActionChains

ActionChains(driver).drag_and_drop(ele1, ele2).perform()

# DrissionPage 写法:
ele1.drag_to(ele2)

滚动到页面底部

# selenium 写法:
driver.execute_script(
    "window.scrollTo(document.documentElement.scrollLeft, document.body.scrollHeight);"
)

# DrissionPage 写法:
tab.scroll.to_bottom()

无头模式

# selenium 写法:
options = webdriver.ChromeOptions()
options.add_argument("--headless")

# DrissionPage 写法:
options = ChromiumOptions().headless()

获取伪元素

# selenium 写法:
text = driver.execute_script(
    'return window.getComputedStyle(arguments[0], "::after").getPropertyValue("content");',
    element
)

# DrissionPage 写法:
text = element.pseudo.after

获取 shadow-root

# selenium 写法:
shadow = driver.execute_script(
    'return arguments[0].shadowRoot', element
)

# DrissionPage 写法:
shadow = element.sr

XPath 获取属性或文本节点

# selenium 写法:相当复杂

# DrissionPage 写法:
class_name = element('xpath://div[@id="div_id"]/@class')
text = element('xpath://div[@id="div_id"]/text()[2]')

功能差异

功能seleniumDrissionPage
浏览器自动化支持支持
HTTP 请求不支持SessionPage 支持
内置解析不支持内置
数据包模式不支持支持
模式切换不支持支持
内置下载不支持支持
xpath 获取属性很麻烦简单
伪元素获取需要 JS内置
shadow-root功能有限完整支持

selenium 的优势

  1. 生态成熟:历史悠久,社区庞大,文档丰富
  2. 多语言支持:Java、Python、C#、JavaScript 等
  3. W3C 标准:WebDriver 是 W3C 标准协议
  4. 企业支持:很多测试框架基于 selenium

DrissionPage 的优势

  1. 代码量少:API 设计更简洁,同样的功能代码更少
  2. 内置解析:不需要引入 lxml/BeautifulSoup
  3. 双模式:浏览器 + 数据包模式互通
  4. 中文文档:官方文档是中文,学习门槛低
  5. API 统一:一套语法搞定多种操作

迁移指南

如果你在用 selenium,迁移到 DrissionPage 不难。

创建浏览器

# selenium
from selenium import webdriver
driver = webdriver.Chrome()

# DrissionPage
from DrissionPage import ChromiumPage
page = ChromiumPage()

打开网页

# selenium
driver.get('https://example.com')

# DrissionPage
page.get('https://example.com')

查找元素

# selenium
element = driver.find_element(By.CSS_SELECTOR, '#id')
element = driver.find_element(By.XPATH, '//div')

# DrissionPage
element = page('#id')
element = page('xpath://div')

操作元素

# selenium
element.click()
element.send_keys('text')
text = element.text

# DrissionPage
element.click()
element.input('text')
text = element.text

执行 JavaScript

# selenium
driver.execute_script('alert(1)')

# DrissionPage
page.run_js('alert(1)')

等待

# selenium
from selenium.webdriver.support.ui import WebDriverWait
WebDriverWait(driver, 10).until(
    ec.presence_of_element_located((By.ID, 'id'))
)

# DrissionPage
page.wait.ele_display('#id', timeout=10)

注意事项

  1. 等待机制不同:DrissionPage 内置了隐式等待,写法更简洁
  2. 元素返回值:selenium 返回 WebElement,DrissionPage 返回 ChromiumElement
  3. 异常类型:两者抛的异常类型不同,迁移时注意捕获方式
  4. iframe 处理:DrissionPage 不需要切入切出

小结

DrissionPage 在 API 设计上更简洁,代码量更少。

内置了解析能力,不需要额外引入库。双模式设计是独特优势。

selenium 生态更成熟,但日常自动化任务 DrissionPage 效率更高。

迁移成本不高,核心思路一致,主要改 API 调用方式。