1. DrissionPage 简介 #

2. 安装与快速入门 #

2.1 安装与导入 #

# 说明:使用 pip 安装 DrissionPage 库
py -m pip install DrissionPage
# 说明:从 DrissionPage 导入浏览器页面对象 ChromiumPage
# 说明:从 DrissionPage 导入请求页面对象 SessionPage
from DrissionPage import ChromiumPage, SessionPage

2.2 浏览器路径设置 #

# 说明:导入 ChromiumPage,用于控制浏览器
from DrissionPage import ChromiumPage

# 说明:创建浏览器页面对象
page = ChromiumPage()

# 说明:打开百度首页,测试浏览器是否能正常启动
page.get('https://www.baidu.com')

# 说明:打印成功提示
print('浏览器启动成功')
# 说明:导入浏览器配置类 ChromiumOptions
from DrissionPage import ChromiumOptions

# 说明:设置 Chrome 可执行文件路径并保存到配置文件(按实际路径修改)
ChromiumOptions().set_browser_path(
    r'C:\Program Files\Google\Chrome\Application\chrome.exe'
).save()

2.3 第一个自动化脚本 #

# 说明:导入 ChromiumPage
from DrissionPage import ChromiumPage

# 说明:创建浏览器页面对象
page = ChromiumPage()

# 说明:打开百度首页
page.get('https://www.baidu.com')

# 说明:定位 id 为 kw 的搜索框,输入关键词
page.ele('#kw').input('DrissionPage')

# 说明:定位 id 为 chat-submit-button 的「百度一下」按钮并点击
page.ele('#chat-submit-button').click()

3. 元素查找 #

3.1 基本用法 #

# 说明:导入 ChromiumPage
from DrissionPage import ChromiumPage

# 说明:创建浏览器页面对象
page = ChromiumPage()

# 说明:打开示例 HTML 页面
page.get('https://static.docs-hub.com/ysczdjbyf_1750214922342.html')

# 说明:用 id 选择器 #one 查找 div 元素
div1 = page.ele('#one')

# 说明:用属性选择器精确匹配 name="row1" 的 p 元素
p1 = page.ele('@name=row1')

# 说明:用文本模糊匹配包含「第二个div」的元素
div2 = page.ele('第二个div')

# 说明:查找页面上所有 div 元素,返回列表
all_divs = page.eles('tag:div')

# 说明:在 div1 内部查找所有 p 标签
p_list = div1.eles('tag:p')

# 说明:获取 div1 的下一个同级兄弟元素
next_div = div1.next()

# 说明:打印 p1 的文本和 next_div 的文本
print(p1.text, next_div.text)

3.2 常用选择器 #

# 说明:导入 ChromiumPage
from DrissionPage import ChromiumPage

# 说明:创建页面对象
page = ChromiumPage()

# 说明:打开示例页面
page.get('https://static.docs-hub.com/ysczdjbyf_1750214922342.html')

# 说明:按 id 查找元素
print(page.ele('#one'))

# 说明:按 class 查找元素
print(page.ele('.p_cls'))

# 说明:按属性精确匹配查找元素
print(page.ele('@name=row1'))

# 说明:按属性模糊匹配查找元素
print(page.ele('@class:p_cls'))

# 说明:按标签名查找元素
print(page.ele('tag:p'))

# 说明:按可见文本模糊匹配查找元素
print(page.ele('第二个div'))

3.3 用 SessionPage 抓取静态页 #

# 说明:导入 ChromiumPage,使用浏览器渲染页面(Gitee 需 JS 加载)
from DrissionPage import ChromiumPage

# 说明:创建浏览器页面对象
page = ChromiumPage()

# 说明:访问 Gitee 探索页
page.get('https://gitee.com/explore')
page.wait.doc_loaded()

# 说明:定位包含推荐项目列表的 div 容器
container = page.ele('tag:div@class:explore-repo__list', timeout=10)

# 说明:在容器内查找所有项目标题链接
titles = container.eles('tag:a@class:title project-namespace-path')

# 说明:遍历并打印每个项目标题
for t in titles:
    print(t.text)

4. 元素操作 #

4.1 点击、输入与读取 #

# 说明:导入 ChromiumPage
from DrissionPage import ChromiumPage

# 说明:创建浏览器页面对象
page = ChromiumPage()

# 说明:打开 Gitee 登录页
page.get('https://gitee.com/login')

# 说明:定位用户名输入框并输入账号(请替换为实际账号)
page.ele('#user_login').input('your_username')

# 说明:定位密码输入框并输入密码(请替换为实际密码)
page.ele('#user_password').input('your_password')

# 说明:定位登录按钮并点击
page.ele('@name=commit').click()

4.2 批量获取元素 #

# 说明:导入 SessionPage
from DrissionPage import SessionPage

# 说明:创建页面对象
page = SessionPage()

# 说明:打开示例页面
page.get('https://static.docs-hub.com/a_1783080368749.html')

# 说明:获取页面上所有 a 链接元素
links = page.eles('tag:a')

# 说明:遍历每个链接,打印文字和 href 属性
for link in links:
    print(link.text, link.attr('href'))

# 说明:一次性获取所有链接的文字列表
print(links.get.texts())

4.3 等待与异常判断 #

# 说明:导入 ChromiumPage
from DrissionPage import ChromiumPage

# 说明:创建页面对象
page = ChromiumPage()

# 说明:打开百度首页
page.get('https://www.baidu.com')

# 说明:查找不存在的元素,最多等待 3 秒
ele = page.ele('#not_exist', timeout=3)

# 说明:判断元素是否存在
if not ele:
    print('元素未找到')
else:
    print(ele.text)

5. 常用场景 #

5.1 多标签页切换 #

# 说明:导入 ChromiumPage
from DrissionPage import ChromiumPage

# 说明:导入 time 模块,用于短暂等待页面加载
import time

# 说明:创建浏览器页面对象
page = ChromiumPage()

# 说明:新建标签页并打开百度,返回标签对象
tab_baidu = page.new_tab('https://www.baidu.com')

# 说明:再新建标签页并打开网易
tab_163 = page.new_tab('https://www.163.com')

# 说明:等待 1 秒,确保页面加载
time.sleep(1)

# 说明:切换回百度标签页
page.activate_tab(tab_baidu.tab_id)

# 说明:打印当前标签页标题
print(page.title)

5.2 批量下载图片 #

# 说明:导入 os,用于创建目录和拼接路径
import os

# 说明:导入 requests,用于下载图片
import requests

# 说明:导入 ChromiumPage
from DrissionPage import ChromiumPage

# 说明:创建浏览器页面对象
page = ChromiumPage()

# 说明:打开包含图片列表的示例页面
page.get('https://static.docs-hub.com/8_1750232305740.html')

# 说明:获取页面上所有 img 元素
imgs = page.eles('tag:img')

# 说明:创建 imgs 文件夹,已存在则不报错
os.makedirs('imgs', exist_ok=True)

# 说明:遍历每张图片
for img in imgs:
    # 说明:获取图片的 src 地址
    url = img.attr('src')
    # 说明:生成本地保存路径,文件名取 URL 最后一段
    filename = os.path.join('imgs', os.path.basename(url))
    # 说明:发送 HTTP 请求下载图片
    resp = requests.get(url)
    # 说明:以二进制方式写入文件
    with open(filename, 'wb') as f:
        f.write(resp.content)
    # 说明:打印已下载的文件名
    print(f'已下载: {filename}')

6. 常见问题 #

6.1 浏览器无法启动 #

6.2 找不到元素 #

6.3 SessionPage 与 ChromiumPage 怎么选 #

7. API 速查 #

操作 写法
创建浏览器页面对象 page = ChromiumPage()
创建请求页面对象 page = SessionPage()
打开网址 page.get(url)
查找单个元素 page.ele('选择器')
查找多个元素 page.eles('选择器')
元素内查找 parent.ele('选择器')
输入文字 ele.input('文字')
点击 ele.click()
获取文本 ele.text
获取属性 ele.attr('href')
批量取文本 eles.get.texts()
设置等待 page.ele('#id', timeout=5)
新建标签 page.new_tab(url)
切换标签 page.activate_tab(tab_id)