Python Selenium库全面解析与详解
一、Selenium 库简介
Selenium 是 Python 生态中 最主流的 Web 自动化测试工具,支持通过代码模拟用户操作浏览器行为。其核心特性包括:
- 多浏览器支持:兼容 Chrome、Firefox、Edge、Safari 等主流浏览器。
- 跨平台性:可在 Windows、macOS、Linux 上运行,适配不同开发环境。
- 功能覆盖全面:支持点击、输入、拖拽、文件上传、弹窗处理等操作,满足自动化测试、爬虫、数据采集等场景需求。
- 动态内容处理:通过等待机制(显式/隐式)解决 AJAX 加载、动态渲染等问题。
二、安装与配置
- 安装库:
bash
pip install selenium
- 下载浏览器驱动(以 Chrome 为例):
- 从 ChromeDriver 官网下载对应浏览器版本的驱动。
- 将驱动文件路径添加到系统环境变量,或在代码中指定路径。
三、核心功能与常用函数
1. 浏览器操作
函数/方法 | 功能描述 | 示例代码 |
---|---|---|
**webdriver.Chrome() ** |
创建 Chrome 浏览器实例 | python<br>from selenium import webdriver<br>driver = webdriver.Chrome() |
**driver.get(url) ** |
打开指定网页 | python<br>driver.get("https://www.baidu.com") |
**driver.title ** |
获取当前页面标题 | python<br>print("标题:", driver.title) |
**driver.quit() ** |
关闭浏览器并释放资源(必用) | python<br>driver.quit() |
2. 元素定位
Selenium 提供 8 种元素定位方式,常用方法如下:
定位方式 | 函数示例 | 适用场景 |
---|---|---|
ID | driver.find_element(By.ID, "username") |
元素有唯一 ID 时首选 |
XPath | driver.find_element(By.XPATH, "//input[@class='search']") |
复杂结构页面,需精准定位 |
CSS 选择器 | driver.find_element(By.CSS_SELECTOR, "#submit > span") |
性能优于 XPath,推荐使用 |
类名(Class Name) | driver.find_element(By.CLASS_NAME, "btn-primary") |
元素有唯一类名时适用 |
链接文本(Link Text) | driver.find_element(By.LINK_TEXT, "立即登录") |
定位超链接文本完全匹配 |
部分链接文本 | driver.find_element(By.PARTIAL_LINK_TEXT, "登录") |
超链接文本模糊匹配 |
标签名(Tag Name) | driver.find_element(By.TAG_NAME, "input") |
定位标签类型(如所有输入框) |
Name 属性 | driver.find_element(By.NAME, "password") |
元素有 name 属性时适用 |
3. 元素操作
函数/方法 | 功能描述 | 示例代码 |
---|---|---|
**send_keys(text) ** |
向输入框输入文本 | python<br>search_box = driver.find_element(By.ID, "kw")<br>search_box.send_keys("Python") |
**click() ** |
点击元素(按钮、链接等) | python<br>login_button.click() |
**clear() ** |
清空输入框内容 | python<br>search_box.clear() |
**submit() ** |
提交表单(等效于回车键) | python<br>search_box.submit() |
**text 属性** |
获取元素文本内容 | python<br>print("按钮文本:", button.text) |
4. 等待机制
处理动态加载内容的关键方法:
等待类型 | 描述 | 代码示例 |
---|---|---|
隐式等待 | 全局等待,设置最长等待时间(默认 0 秒) | python<br>driver.implicitly_wait(10) # 所有元素查找最多等 10 秒 |
显式等待 | 针对特定条件灵活等待(推荐) | python<br>from selenium.webdriver.support.ui import WebDriverWait<br>from selenium.webdriver.support import expected_conditions as EC<br>element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "dynamic_element"))) |
5. 高级交互
功能 | 实现方法 | 示例代码 |
---|---|---|
鼠标操作 | 使用 ActionChains 类模拟悬停、拖拽等行为 |
python<br>from selenium.webdriver.common.action_chains import ActionChains<br>actions = ActionChains(driver)<br>actions.drag_and_drop(source, target).perform() |
键盘操作 | 通过 Keys 类模拟快捷键(如回车、Ctrl+C) |
python<br>from selenium.webdriver.common.keys import Keys<br>search_box.send_keys(Keys.CONTROL + 'a') |
文件上传 | 通过 send_keys() 直接传入文件路径 |
python<br>upload_element = driver.find_element(By.ID, "file_input")<br>upload_element.send_keys("/path/to/file.png") |
弹窗处理 | 切换至弹窗并操作(确认/取消) | python<br>alert = driver.switch_to.alert<br>alert.accept() # 确认 |
切换窗口/标签页 | 通过窗口句柄管理多窗口 | python<br>handles = driver.window_handles<br>driver.switch_to.window(handles[1]) |
执行 JavaScript | 直接运行 JS 代码(如滚动页面) | python<br>driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") |
截图功能 | 保存页面或元素截图 | python<br>driver.save_screenshot("page.png")<br>element.screenshot("element.png") |
四、应用场景
- 自动化测试
- 验证 Web 应用功能(如登录、表单提交)。
- 跨浏览器兼容性测试。
- 数据采集
- 抓取动态渲染的网页数据(如电商价格、社交媒体内容)。
- 业务流程自动化
- 自动填写报表、批量上传文件。
- 定时签到、抢购脚本。
五、注意事项
- 驱动版本匹配
- 浏览器与驱动版本需严格对应,否则会报错。
- 反爬机制规避
- 添加随机等待、使用代理 IP 避免被封禁。
- 性能优化
- 使用
find_elements
(返回列表)替代多次find_element
。 - 避免不必要的全局隐式等待。
- 异常处理
- 捕获
NoSuchElementException
、TimeoutException
等常见异常。
作者:wanglaqqqq