DrissionPage的各种运行模式
DrissionPage作为一个灵活的爬虫工具,提供了匿名模式、无头模式和沙盒模式,分别应对浏览器的无痕运行、浏览器静默运行(浏览器不显示、不渲染)、系统对浏览器的防护。是DrissionPage的最重要特征。
DrissionPage作为一个灵活的爬虫工具,提供了匿名模式、无头模式和沙盒模式,分别应对浏览器的无痕运行、浏览器静默运行(浏览器不显示、不渲染)、系统对浏览器的防护。是DrissionPage的最重要特征。
一、匿名模式 vs 非匿名模式
所谓“匿名”与“非匿名”,就是大家熟知的“无痕浏览”的概念,既浏览器是否保存或使用已经保存的历史、Cookie等缓存数据。当浏览器窗口不保存、不共享浏览历史、Cookie、缓存数据时,就是“无痕浏览”模式,也就是“匿名模式”;反之,就是“非匿名模式”。如下表。
特性 | 匿名模式 (co.incognito() ) |
非匿名模式 |
---|---|---|
数据存储 | 不保存浏览历史、Cookie、缓存等数据,关闭后自动清除 | 正常保存浏览历史、Cookie、缓存等数据到本地 |
会话隔离 | 每个匿名窗口是独立的全新会话,互不影响 | 复用本地已有的用户数据和会话 |
适用场景 | 1. 需要干净的独立环境(如多账号隔离) 2. 避免被网站追踪 |
1. 需要持久化登录状态 2. 依赖本地缓存加速访问 |
匿名模式虽然不保存数据,但不能完全隐身(IP、浏览器指纹等仍可能暴露身份)。
示例代码:
# 从DrissionPage库中导入Chromium和ChromiumOptions类
from DrissionPage import Chromium, ChromiumOptions
# 创建一个ChromiumOptions对象,用于配置Chromium浏览器的启动选项
co = ChromiumOptions()
# 设置浏览器为匿名模式,即隐身模式
co.incognito()
二、无头模式 vs 非无头模式
所谓“无头模式”就是“后台运行模式”,此时由于系统无需渲染和显示浏览器窗口内容,因而节省了大量的CPU和内存资源。一般情况下,网络爬虫的正确开发策略应该是:利用“非无头模式”开发和调试,之后在正式运行时采用“无头模式”,这种策略可以节省大量的系统资源。
无头模式可能被网站识别(通过 navigator.webdriver 属性),但是可以通过 co.set_argument('--disable-blink-features=AutomationControlled') 隐藏特征,从而骗过网站服务器。“无头模式”使爬虫在没有真正在浏览器中打开和显示网页的情况下,快速的爬取信息。示例代码如下:
ChromiumOptions().set_argument('--disable-blink-features=AutomationControlled')
“无头模式”与“非无头模式”的对比如下表:
特性 | 无头模式 (co.headless() ) |
非无头模式 |
---|---|---|
界面显示 | 无图形界面,后台静默运行 | 显示浏览器窗口,可见页面操作过程 |
资源占用 | 内存/CPU 占用更低 | 资源占用较高(需渲染界面) |
适用场景 | 1. 服务器/命令行环境 2. 无需观察页面的自动化任务 |
1. 本地调试页面交互 2. 需要可视化排查问题 |
示例代码:
# 从DrissionPage库中导入Chromium和ChromiumOptions类
from DrissionPage import Chromium, ChromiumOptions
# 创建一个ChromiumOptions对象,用于配置Chromium浏览器的启动选项
co = ChromiumOptions()
# 设置浏览器为无头模式,即不显示浏览器界面
co.headless()
#无头模式可能被网站识别(通过 navigator.webdriver 属性),可通过 co.set_argument('--disable-blink-features=AutomationControlled') 隐藏特征。
co.set_argument('--disable-blink-features=AutomationControlled')
三、沙盒模式 vs 非沙盒模式
在 Chromium 浏览器中,沙盒模式(Sandbox)和无沙盒模式(--no-sandbox)是涉及安全性和权限的重要机制,具体区别如下:
特性 | 沙盒模式 (默认开启) | 无沙盒模式 (--no-sandbox ) |
---|---|---|
定义 | 浏览器进程运行在受限环境中,隔离系统资源访问权限 | 浏览器进程直接以当前用户权限运行,无隔离机制 |
安全性 | 高:防止恶意代码利用漏洞攻击操作系统或窃取数据 | 低:浏览器漏洞可能直接威胁系统安全 |
资源隔离 | 每个标签页/进程独立运行,互不影响 | 无隔离,进程共享系统资源 |
资源消耗 | 略高(需维护沙盒环境) | 略低(无沙盒开销) |
适用场景 | 默认模式,适用于绝大多数场景 | 1. 特殊环境(如 Docker、无权限容器) 2. 调试沙盒兼容性问题 |
核心区别说明
-
沙盒模式
-
Chromium 的默认安全机制,浏览器进程被限制在一个“沙盒”中,无法直接访问文件系统、设备或其他敏感资源。
-
即使页面被恶意代码入侵,攻击者也无法通过浏览器进程突破沙盒,危害主机系统。
-
例如:下载文件需通过沙盒权限验证,JavaScript 无法直接读写磁盘。
-
-
无沙盒模式
-
通过
--no-sandbox
参数关闭沙盒机制,浏览器进程以当前用户权限直接运行。 -
高风险:如果浏览器存在漏洞,恶意代码可能直接操控系统(如删除文件、安装木马)。
-
常见于服务器环境(如 Docker 容器)中因权限问题无法启动沙盒时的妥协方案。
-
沙盒模式总结如下表:
模式 | 优点 | 缺点 |
---|---|---|
沙盒模式 | 安全性高,防止系统被攻击 | 需额外资源维护沙盒环境 |
无沙盒模式 | 兼容性高,解决部分环境启动问题 | 安全性极低,仅限可信环境临时使用 |
代码示例:
from DrissionPage import Chromium, ChromiumOptions
co = ChromiumOptions()
co.set_argument('--no-sandbox') # 关闭沙盒模式
co.set_argument('--disable-dev-shm-usage') # 禁用共享内存使用。这通常与无沙盒模式一起使用,以解决共享内存不足的问题。
page = Chromium(co)
沙盒使用注意事项
-
非必要不关闭沙盒
无沙盒模式会显著降低安全性,仅建议在以下场景使用:-
容器化环境(如 Docker)因权限问题无法启动沙盒。
-
本地调试时沙盒导致浏览器崩溃(需优先修复环境问题)。
-
-
沙盒错误排查
若浏览器启动失败并报错[ERROR:zygote_host_impl_linux.cc(90)]
,可能是沙盒权限问题。解决方案:-
添加
--no-sandbox
参数(牺牲安全性)。 -
在 Linux 系统中为 Chrome 配置沙盒白名单(推荐):
bash
chown root:root /path/to/chrome-sandbox chmod 4755 /path/to/chrome-sandbox
-
-
容器化部署
在 Docker 中运行时,建议直接使用官方支持沙盒的镜像(如selenium/standalone-chrome
),而非强行关闭沙盒。
沙盒总结
模式 | 优点 | 缺点 |
---|---|---|
沙盒模式 | 安全性高,防止系统被攻击 | 需额外资源维护沙盒环境 |
无沙盒模式 | 兼容性高,解决部分环境启动问题 | 安全性极低,仅限可信环境临时使用 |
更多推荐
所有评论(0)