WebPage
一、WebPage是什么?
WebPage对象整合了SessionPage和ChromiumPage,实现了两者之间的互通。
- 既可以操控浏览器,也可以收发数据包,并且会在两者之间同步登录信息。
- 有 d 和 s 两种模式,分别对应操控浏览器和收发数据包。
WebPage可灵活的在两种模式间切换,从而实现一些复杂的用法。比如,网站登录代码非常复杂,用数据包实现过于烧脑,我们可以用浏览器处理登录,再通过切换模式用收发数据包的方式去采集数据。
两种模式的使用逻辑是一致的,跟ChromiumPage没有区别,易于上手。
WebPage结构图:

二、创建页面对象
WebPage对象拥有两种模式,d 模式用于操控浏览器,s 模式用于收发数据包。
2.1.直接创建
这种方式代码最简洁,程序会从默认 ini 文件中读取配置,自动生成页面对象。
创建时,可指定初始模式。
from DrissionPage import WebPage # 默认d模式创建对象 page = WebPage() # 指定s模式创建对象 page = WebPage('s')
d 模式创建WebPage对象时会在指定端口启动浏览器,或接管该端口已有浏览器。
默认情况下,程序使用 9222 端口,浏览器可执行文件路径为'chrome'。如路径中没找到浏览器可执行文件,Windows 系统下程序会在注册表中查找路径。如果都没找到,则要用下一种方式手动配置。
| 初始化参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
mode |
str |
'd' |
只能接收'd'或's',即初始选择操控浏览器还是收发数据包 |
timeout |
float |
None |
整体超时时间,为None则从配置文件中读取,默认 10 |
chromium_options |
ChromiumOptionsFalse |
None |
默认为None表示从 ini 文件读取配置进行初始化接收 ChromiumOptions时用该配置启动或接管浏览器如不使用 d 模式功能,接收 False,避免打包出错 |
session_or_options |
SessionSessionOptionsFalse |
None |
默认为None表示从 ini 文件读取配置进行初始化接收 Session时直接使用一个已创建的Session对象接收 SessionOptions时用该配置创建Session对象如不使用 s 模式功能,接收 False,避免打包出错 |
2.2.通过配置信息创建
如果需要已指定方式启动浏览器,可使用ChromiumOptions和SessionOptions。它们的使用在各自的章节已经介绍过,这里只演示如何在WebPage创建时使用。
📌 使用配置方法
创建两个配置对象后,传递给WebPage的初始化方法。
from DrissionPage import WebPage, ChromiumOptions, SessionOptions co = ChromiumOptions() so = SessionOptions() page = WebPage(chromium_options=co, session_or_options=so)
📌 使用指定 ini 文件创建
以上方法是使用默认 ini 文件中保存的配置信息创建对象,你可以保存一个 ini 文件到别的地方,并在创建对象时指定使用它。
from DrissionPage import WebPage, ChromiumOptions, SessionOptions co = ChromiumOptions(ini_path=r'./config1.ini') so = SessionOptions(ini_path=r'./config1.ini') page = WebPage(chromium_options=co, session_or_options=so)
三、模式切换
WebPage的 d 模式,行为与ChromiumPage一致,s 模式行为与SessionPage一致。使用change_mode()方法进行切换。模式切换的时候会同步登录信息。
3.1.mode
此属性返回WebPage当前模式。
示例:
from DrissionPage import WebPage page = WebPage() print(page.mode)
输出:d
3.2.change_mode()
此方法用于切换WebPage运行模式。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
mode |
strNone |
None |
接收 's' 或 'd',以切换到指定模式 接收 None则切换到与当前相对的另一个模式 |
go |
bool |
True |
目标模式是否跳转到原模式的 url |
copy_cookies |
bool |
True |
切换时是否复制 cookies 到目标模式 |
3.3.跨模式使用功能
有些功能是 d 模式独有,如click(),有些则是 s 模式独有,如post()。
事实上,无论处于哪种模式,另一种模式的连接依然存在。因此,在 s 模式调用点击浏览器元素,是完全可以的,两者并不冲突。
这样的设计让使用非常灵活,如要同步登录状态,只需切换模式,或传递 cookies 即可。
📌 cookies_to_session()
此方法用于复制浏览器当前页面的 cookies 到Session对象。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
copy_user_agent |
bool |
True |
是否复制 user agent 信息 |
📌 cookies_to_browser()
此方法用于把Session对象的 cookies 复制到浏览器。
📌 post()返回值说明
SessionPage的post()方法返回网页是否连通,而用page.html或page.json获取内容。
WebPage在 s 模式下post()用法也一致。
但在 d 模式,由于post()是 s 模式功能,与 d 模式的html参数冲突。
所以,d 模式时post()返回获取到的Response对象,这与requests用法一致。
3.4.切换模式案例
from DrissionPage import WebPage page = WebPage() page.get('https://www.baidu.com') print(page.mode) page.change_mode() print(page.mode) print(page.title)
输出:
d
s
百度一下,你就知道
四、WebPage独有功能
4.1.cookies 处理
📌 cookies_to_session()
此方法把浏览器的 cookies 复制到session对象。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
copy_user_agent |
bool |
True |
是否复制 user agent 信息 |
返回:None
📌 cookies_to_browser()
此方法把session对象的 cookies 复制到浏览器。
参数: 无
返回:None
4.2.属性设置
set_cookies()、set_headers()、set_user_agent()方法设置的值,只对当前模式有效,即 d 模式时调用这些方法,会对浏览器进行设置,而不会对 Session 对象进行设置,反之亦然。
4.3.标签页
WebPage的get_tab()方法获取的标签页对象是MixTab,它与WebPage一样也能切换状态。除了不能控制标签页和浏览器的下载功能,其它功能与WebPage一致。MixTab刚创建的时候处于 d 模式。
示例:
from DrissionPage import WebPage page = WebPage() tab = page.new_tab('https://www.baidu.com') tab.change_mode() # Tab对象也能切换模式 tab.get('https://gitee.com') print(tab.title)
4.4.关闭对象
📌 close_driver()
此方法关闭内置Driver对象及浏览器,并切换到 s 模式。
📌 close_session()
此方法关闭内置Session对象及浏览器,并切换到 d 模式。
📌 close()
此方法用于关闭当前标签页和 Session。
📌 quit()
此方法彻底关闭内置的Session对象和Driver对象,并关闭浏览器(如已打开)。
| 参数名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
timeout |
float |
5 |
等待浏览器关闭超时时间(秒) |
force |
bool |
True |
关闭超时是否强制终止进程 |

浙公网安备 33010602011771号