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. 调试沙盒兼容性问题

核心区别说明

  • 沙盒模式

    1. Chromium 的默认安全机制,浏览器进程被限制在一个“沙盒”中,无法直接访问文件系统、设备或其他敏感资源。

    2. 即使页面被恶意代码入侵,攻击者也无法通过浏览器进程突破沙盒,危害主机系统。

    3. 例如:下载文件需通过沙盒权限验证,JavaScript 无法直接读写磁盘。

  • 无沙盒模式

    1. 通过 --no-sandbox 参数关闭沙盒机制,浏览器进程以当前用户权限直接运行。

    2. 高风险:如果浏览器存在漏洞,恶意代码可能直接操控系统(如删除文件、安装木马)。

    3. 常见于服务器环境(如 Docker 容器)中因权限问题无法启动沙盒时的妥协方案。

沙盒模式总结如下表:

模式 优点 缺点
沙盒模式 安全性高,防止系统被攻击 需额外资源维护沙盒环境
无沙盒模式 兼容性高,解决部分环境启动问题 安全性极低,仅限可信环境临时使用

代码示例:

from DrissionPage import Chromium, ChromiumOptions

co = ChromiumOptions()
co.set_argument('--no-sandbox')  # 关闭沙盒模式
co.set_argument('--disable-dev-shm-usage')  # 禁用共享内存使用。这通常与无沙盒模式一起使用,以解决共享内存不足的问题。
page = Chromium(co)

沙盒使用注意事项

  1. 非必要不关闭沙盒
    无沙盒模式会显著降低安全性,仅建议在以下场景使用:

    • 容器化环境(如 Docker)因权限问题无法启动沙盒。

    • 本地调试时沙盒导致浏览器崩溃(需优先修复环境问题)。

  2. 沙盒错误排查
    若浏览器启动失败并报错 [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
  3. 容器化部署
    在 Docker 中运行时,建议直接使用官方支持沙盒的镜像(如 selenium/standalone-chrome),而非强行关闭沙盒。


沙盒总结

模式 优点 缺点
沙盒模式 安全性高,防止系统被攻击 需额外资源维护沙盒环境
无沙盒模式 兼容性高,解决部分环境启动问题 安全性极低,仅限可信环境临时使用
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐