跳至正文
中文
立即开始

Selenium

Selenium 是一套开源浏览器自动化工具,用于测试 Web 应用、操作 JavaScript 页面并采集渲染后的数据。

文章目录(8 个章节)

Selenium 的用途

大多数脚本使用的是 Selenium WebDriver。它通过各浏览器的驱动程序向 Chrome、Firefox、Edge 或 Safari 发送命令。Selenium IDE 可录制简单的浏览器操作,Selenium Grid 则能在多台计算机上运行会话。

常见用途包括:

  • 测试表单、导航及其他浏览器操作流程。
  • 采集需要 JavaScript 渲染的内容。
  • 截取屏幕截图,或检查页面在不同浏览器中的表现。

Selenium 控制的是完整浏览器,因此可以点击按钮、输入文本、管理 Cookie,并检查渲染后的文档。

Selenium WebDriver 的工作原理

语言绑定会把 Python、Java、C# 或 JavaScript 调用转换为 WebDriver 命令。浏览器执行每项操作后,会返回元素数据、页面状态或错误。现代版本的 Selenium 通常可以自动查找或下载兼容的浏览器驱动程序。

下面的 Python 示例会打开页面,并等待通过 CSS 选择器找到的元素出现:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://example.com")
heading = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.CSS_SELECTOR, "h1"))
)
print(heading.text)
driver.quit()

显式等待比固定等待更稳妥,因为预期条件一满足,程序就会立即继续执行。

让 Selenium 通过代理连接

如果代理不需要认证,请在创建 WebDriver 会话前,将代理的主机和端口传给 Chrome:

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument("--proxy-server=http://HOST:PORT")
driver = webdriver.Chrome(options=options)

需要更换代理设置时,应启动新的浏览器会话。Firefox 使用基于浏览器首选项的配置,而不是 Chrome 的命令行参数。

需要认证的代理端点通常写作 http://USERNAME:PASSWORD@HOST:PORT。WebDriver 的标准代理设置没有用于填写 HTTP 代理认证信息的字段,而把认证信息放入 Chrome 的代理参数后,Chrome 往往也无法完成认证。此时可使用浏览器扩展、已配置的浏览器环境,或能处理代理认证的本地代理适配器。如果未提供认证信息或认证失败,HTTP 代理通常会返回 407 Proxy Authentication Required。

Selenium、Playwright 与 Scrapy 对比

工具 适用场景 主要取舍
Selenium 跨浏览器 UI 测试 浏览器配置和资源开销
Playwright 现代浏览器自动化 API 和工具体系不同
Scrapy 大规模 HTTP 采集 默认不支持 JavaScript 渲染

与直接使用 HTTP 客户端相比,Selenium 会占用更多内存和 CPU。页面需要浏览器渲染或交互时再使用 Selenium。请求频率应保持在网站限制范围内,并遵守其 robots.txt 规则和条款。

常见问题

Selenium 适合网页采集吗?

适合,尤其是内容需要运行 JavaScript 后才会显示,或需要点击和滚动操作时。对于静态 HTML 或 API,直接使用 HTTP 客户端通常更快。

Selenium 可以使用需要认证的代理吗?

可以,但通常需要借助浏览器扩展、已配置的浏览器环境或本地适配器完成认证。WebDriver 的标准代理设置没有用于填写 HTTP 代理认证信息的字段。

无头模式的 Selenium 能避开机器人检测吗?

不能。无头模式只会隐藏浏览器窗口,网站仍可检查 WebDriver 信号、指纹和行为。代理只会更改网站看到的 IP 地址,不会改变 WebDriver 信号、指纹和行为。

相关术语

查看全部术语