Python selenium 库¶
概念与用途¶
Selenium 通过 WebDriver 控制真实浏览器,适合端到端测试和必须执行 JavaScript 的自动化。现代 Selenium Manager 可自动发现或下载兼容驱动。
核心 API¶
本教程建议 python -m pip install "selenium>=4.15"。还需要兼容浏览器;Selenium Manager 通常可管理驱动,但首次运行可能需要网络下载并受代理策略影响。
from selenium import webdriver
from selenium.webdriver.common.by import By
options = webdriver.ChromeOptions()
options.add_argument("--headless=new")
driver = webdriver.Chrome(options=options)
try:
driver.get("data:text/html,<title>Demo</title><h1 id='msg'>Hello</h1>")
print(driver.title, driver.find_element(By.ID, "msg").text)
finally:
driver.quit()
等待与资源¶
| API | 用途 | 建议 |
|---|---|---|
set_page_load_timeout |
页面加载上限 | 创建后设置 |
WebDriverWait |
等元素状态 | 替代固定 sleep |
implicitly_wait |
全局隐式等待 | 不与显式等待复杂混用 |
quit() |
关闭全部窗口和驱动 | 始终 finally 调用 |
示例:显式等待¶
from selenium.webdriver.support.ui import WebDriverWait
# 假设 driver 已按上一例创建
# driver.set_page_load_timeout(20)
# element = WebDriverWait(driver, 5).until(
# lambda current: current.find_element(By.ID, "msg")
# )
print("显式等待应绑定具体条件,而不是固定休眠")
浏览器自动化会执行站点脚本,应隔离下载目录和凭据,避免用高权限用户运行。并发实例数量受 CPU、内存和站点容量限制,必须有任务总超时和进程回收。
常见错误与安全注意¶
- 不要依赖固定
sleep(),使用显式等待以减少脆弱测试。 - 必须在
finally中quit(),否则会遗留浏览器进程。 - 自动化应遵守站点条款、授权和频率限制,不得绕过访问控制。