在網頁自動化領域,Selenium 和 Playwright 早已是開發者耳熟能詳的工具。但今天要給大家介紹一款更輕量、更易用的 Python 庫 ——DrissionPage。它以 "融合 selenium 和 requests 優勢" 為核心設計理念,既能像 requests 一樣高效處理靜態網頁,又能像 selenium 一樣操控動態頁面,讓網頁爬取和自動化測試變得前所未有的簡單。
一、DrissionPage 是什么?
DrissionPage 是由國內開發者開發的一款網頁自動化工具,它的核心特點是 **"一體化"**:將 "靜態請求" 與 "動態渲染" 兩種操作模式無縫結合,無需在 requests 和 selenium 之間切換,就能輕松應對各種網頁場景。
二、為什么選擇 DrissionPage?
相比傳統工具,DrissionPage 的優勢非常明顯:
- 極簡 API:告別 Selenium 繁瑣的初始化配置,一行代碼即可啟動瀏覽器或發送請求。
- 兼顧效率與交互:靜態頁面用 requests 模式快速爬取,動態頁面切換到瀏覽器模式處理,避免 "殺雞用牛刀"。
- 強大的元素定位:支持 CSS 選擇器、XPath、文本、屬性等多種定位方式,且語法更簡潔。
- 內置反反爬機制:自動處理部分反爬策略(如 User-Agent 隨機化、Cookie 持久化)。
- 完整的文檔支持:中文文檔詳盡,對國內開發者友好,入門門檻低。
三、快速上手:DrissionPage 基礎用法
1. 安裝庫
bash
pip install?DrissionPage
2. 靜態模式:爬取靜態網頁
適用于無需交互的靜態頁面(如新聞詳情頁、博客文章):
代碼:
from?DrissionPage import?SessionPage# 創建靜態頁面對象(基于requests)page =?SessionPage()# 發送請求page.get("https://www.baidu.com")# 獲取頁面標題print("頁面標題:",?page.title)# 獲取頁面源碼html =?page.html# 用CSS選擇器提取元素search_input =?page.ele("#kw")??# 定位百度搜索框print("搜索框默認值:",?search_input.attr("value"))
3. 動態模式:操控瀏覽器
適用于需要交互的動態頁面(如登錄、表單提交、JavaScript 渲染內容):
代碼:
from DrissionPage import ChromiumPage
# 創建瀏覽器頁面對象(默認啟動Chrome)
page = ChromiumPage()
# 打開網頁
page.get("https://www.baidu.com")
# 定位并輸入搜索關鍵詞
page.ele("#kw").input("DrissionPage")
# 點擊搜索按鈕
page.ele("#su").click()
# 等待頁面加載完成
page.wait.load_start()
# 提取搜索結果
results = page.eles(".result a") ?# 獲取所有結果鏈接
for i, result in enumerate(results[:5], 1):print(f"結果{i}:{result.text},鏈接:{result.attr('href')}")# 關閉瀏覽器
page.close()
4. 多開瀏覽器
使用ChromiumOptions對象的atuo_port()方法,可指定程序自動創建全新的瀏覽器,多個瀏覽器互不干擾。
代碼:
from DrissionPage import ChromiumPage
# 創建瀏覽器頁面對象(默認啟動Chrome)
page = ChromiumPage()
# 打開網頁
page.get("https://www.baidu.com")
# 定位并輸入搜索關鍵詞
page.ele("#kw").input("DrissionPage")
# 點擊搜索按鈕
page.ele("#su").click()
# 等待頁面加載完成
page.wait.load_start()
# 提取搜索結果
results = page.eles(".result a") ?# 獲取所有結果鏈接
for i, result in enumerate(results[:5], 1):print(f"結果{i}:{result.text},鏈接:{result.attr('href')}")# 關閉瀏覽器
page.close()
四、進階技巧:讓自動化更高效
1. 元素定位:多種方式靈活選擇
DrissionPage 的元素定位語法非常靈活,支持多種方式:
代碼:
# 1. CSS選擇器(推薦)page.ele("#username")??# ID選擇器page.ele(".password")??# 類選擇器page.ele("input[name='email']")??# 屬性選擇器# 2. XPathpage.ele("//div[@class='content']")# 3. 文本內容(精確匹配)page.ele("text=提交訂單")# 4. 部分文本匹配(模糊定位)page.ele("text:包含('登錄')")# 5. 標簽名page.ele("tag:select")
2. 處理 iframe 和彈窗
無需切換上下文,直接定位嵌套元素:
代碼:
# 定位iframe中的元素(自動切換到iframe上下文)iframe_ele =?page.ele("#iframe1").ele("#username")# 處理alert彈窗alert =?page.alert ?# 獲取彈窗對象print(alert.text)??# 打印彈窗內容alert.accept()??# 確認彈窗
3. 配置瀏覽器參數
自定義瀏覽器啟動參數(如無頭模式、代理):
代碼:
from?DrissionPage import?ChromiumOptions,?ChromiumPage# 創建配置對象co =?ChromiumOptions()co.set_headless(True)??# 無頭模式(不顯示瀏覽器窗口)co.set_proxy("http://127.0.0.1:8888")??# 設置代理co.add_argument("--disable-images")??# 禁用圖片加載# 應用配置啟動瀏覽器page =?ChromiumPage(co)
五、DrissionPage vs 其他工具
工具 | 優勢 | 劣勢 |
DrissionPage | 靜態 / 動態無縫切換,API 簡潔,學習成本低 | 生態相對較小,復雜場景案例較少 |
Selenium | 生態成熟,支持多瀏覽器 | API 繁瑣,配置復雜,速度較慢 |
Playwright | 跨瀏覽器支持好,異步性能強 | 語法較新,與 requests 配合需額外處理 Cookie |
requests | 速度快,輕量 | 無法處理 JavaScript 動態內容 |
官方文檔鏈接:https://www.drissionpage.cn/