首页 / DrissionPage 入门教程 / SessionPage 详解

DrissionPage 入门教程

SessionPage 详解

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

DrissionPageDrissionPage 入门教程SessionPage数据包requests高效请求

32. SessionPage 详解

本节目标:掌握 SessionPage 的创建方式和配置方法,能用 get() 和 post() 收发数据,理解它和 requests 的关系。

SessionPage 是 DrissionPage 三种页面对象之一。

它不控制浏览器,直接用 requests 库收发数据包。

没有浏览器启动的开销,请求速度比 ChromiumPage 快得多。

适合处理静态页面、API 接口、文件下载等不需要 JS 渲染的场景。

创建 SessionPage

最简单的方式,一行搞定:

from DrissionPage import SessionPage

page = SessionPage()

不传参数时,程序会从 ini 配置文件读取配置。没有 ini 文件就用内置默认配置。

用 SessionOptions 配置

需要自定义配置时,用 SessionOptions

from DrissionPage import SessionPage, SessionOptions

# 创建配置对象,设置代理
so = SessionOptions().set_proxies(http='127.0.0.1:1080')

# 用配置创建页面对象
page = SessionPage(session_or_options=so)

不使用 ini 文件

read_file 设为 False,完全用代码配置:

so = SessionOptions(read_file=False)
so.set_retry(5)
page = SessionPage(so)

指定 ini 文件路径

so = SessionOptions(ini_path=r'./config1.ini')
page = SessionPage(session_or_options=so)

共享 Session 对象

多个页面对象可以共用一个 Session,共享 cookies 和连接池:

page1 = SessionPage()
session = page1.session  # 获取内置 Session 对象

page2 = SessionPage(session_or_options=session)  # 共享

访问网页

get() 方法

get() 和 requests 的 get() 参数基本一致,但不返回 Response 对象。

结果存在页面对象的属性里。

page = SessionPage()
page.get('https://www.baidu.com')

print(page.title)  # 从属性读取结果
print(page.html)

带参数请求:

url = 'https://www.baidu.com'
headers = {'referer': 'gitee.com'}
cookies = {'name': 'value'}
proxies = {'http': '127.0.0.1:1080', 'https': '127.0.0.1:1080'}

page.get(url, headers=headers, cookies=cookies, proxies=proxies)

headers 是合并不是覆盖

传入 headers 时,里面的项会覆盖配置中的同名项,不会整个替换。没写的项保持配置里的值。

post() 方法

page = SessionPage()

# 表单数据
page.post('http://example.com', data={'username': 'admin', 'pwd': '123'})

# JSON 数据
page.post('http://example.com', json={'key': 'value'})

datajson 都支持 str 和 dict 两种格式:

page.post(url, data='abc=123')          # 字符串
page.post(url, data={'abc': '123'})     # 字典
page.post(url, json='{"abc":"123"}')    # JSON 字符串
page.post(url, json={'abc': '123'})     # JSON 字典

读取本地文件

get() 的 url 参数可以指向本地文件:

page.get(r'D:\demo.html')
print(page.html)

其他请求方式

SessionPage 只封装了 get 和 post。

需要 head、put、delete 等其他方式,直接用内置的 session 对象:

session = page.session
response = session.head('https://www.baidu.com')
print(response.headers)

获取页面信息

访问成功后,用页面对象的属性获取结果:

属性说明
url当前访问的 URL
title页面标题
html页面 HTML 文本
json把响应解析成 dict(API 响应很方便)
raw_data原始 bytes 数据
user_agent当前 user agent
url_available当前链接是否可用
page.get('https://www.baidu.com')
print(page.title)
print(page.html[:200])

获取 cookies

# 当前域名的 cookies
cookies = page.cookies()

# 所有域名的 cookies
cookies = page.cookies(all_domains=True)

# 包含完整信息(domain、expires 等)
cookies = page.cookies(all_info=True)

cookies 支持格式转换:

page.cookies().as_str()   # 'name1=value1; name2=value2'
page.cookies().as_dict()  # {'name1': 'value1', 'name2': 'value2'}
page.cookies().as_json()  # JSON 字符串

获取 Response 对象

page.response 是 requests 的 Response 对象:

r = page.response
print(r.status_code)
print(r.headers)
print(r.content)

运行参数

属性说明默认值
timeout请求超时(秒)10
retry_times重试次数3
retry_interval重试间隔(秒)2

小结

SessionPage 本质上就是给 requests 包了一层皮。

  • 不用启动浏览器,速度快
  • API 设计接近 requests,学习成本低
  • 拿到的是静态 HTML,JS 渲染的内容处理不了

能用 SessionPage 搞定的场景,就不需要开浏览器。这是性能最优的选择。