1. Selenium 简介
Selenium 是一款开源的 Web 自动化测试框架,主要用于编写自动化测试脚本来模拟用户在浏览器上的各种操作。它可以帮助测试工程师自动执行回归测试、功能测试以及性能测试。
核心组件:
WebDriver:驱动浏览器执行操作
IDE:录制和回放工具(适合简单场景)
支持浏览器:Chrome、Firefox、Edge、Safari 等
适用语言:Python、Java、C#、JavaScript 等
2. 环境搭建
Python 环境 安装selenium库
pip install selenium
浏览器驱动(以 Chrome 为例) 下载对应版本的 ChromeDriver
将驱动文件添加到系统 PATH,或通过代码指定路径:
from selenium import webdriver
driver = webdriver.Chrome(executable_path="path/to/chromedriver")
3. 基础使用
示例代码
from selenium import webdriver
# 初始化浏览器
driver = webdriver.Chrome()
# 打开网页
driver.get("https://www.baidu.com")
# 获取页面标题
print(driver.title) # 输出:百度一下,你就知道
# 关闭浏览器
driver.quit()
4. 元素定位
常用定位方法
| 方法 | 示例 | 说明 |
|---|---|---|
| find_element(By.ID) | driver.find_element(By.ID,"wd") | 通过 ID 定位 |
| find_element(By.NAME,) | driver.find_element(By.NAME,"wd") | 通过 name 属性定位 |
| find_element(By.XPATH) | driver.find_element(By.XPATH,"//input[@id='kw']") | XPath 定位 |
| find_element(By.CSS_SELECTOR,) | driver.find_element(By.CSS_SELECTOR,"#kw") | CSS 选择器定位 |
| find_element(By.CLASS_NAME) | driver.find_element(By.CLASS_NAME,"s_ipt") | 通过 class 定位 |
| find_element(By.LINK_TEXT) | driver.find_element(By.LINK_TEXT,"新闻") | 通过链接文本定位 |
| find_element(By.PARTIAL_LINK_TEXT) | driver.find_element(By.PARTIAL_LINK_TEXT,"新闻") | 通过链接文本定位 |
| find_element(By.TAG_NAME) | driver.find_element(By.TAG_NAME,"a") | 通过标签名定位元素 |
5. 交互操作
常用方法
# 输入文本
search_box = driver.find_element_by_id("kw")
search_box.send_keys("Selenium教程")
# 点击按钮
search_button = driver.find_element_by_id("su")
search_button.click()
# 清空输入框
search_box.clear()
# 提交表单(针对表单元素)
search_box.submit()
# 获取元素属性
print(search_box.get_attribute("class"))
# 获取元素文本
link = driver.find_element_by_link_text("新闻")
print(link.text)
6. 等待机制
隐式等待(全局等待)
driver.implicitly_wait(10) # 最多等待10秒
显式等待(精确控制)
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "kw"))
)
7. 浏览器操作
常用方法
# 窗口最大化
driver.maximize_window()
# 后退/前进
driver.back()
driver.forward()
# 刷新页面
driver.refresh()
# 窗口切换
for handle in driver.window_handles:
driver.switch_to.window(handle)
# 处理弹窗
alert = driver.switch_to.alert
alert.accept() # 确认弹窗
8. 进阶技巧
执行 JavaScript
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
处理 Cookies
# 获取所有 cookies
cookies = driver.get_cookies()
# 添加 cookie
driver.add_cookie({"name": "test", "value": "123"})
截图与日志
driver.save_screenshot("screenshot.png")
Headless 模式(无界面)
options = webdriver.ChromeOptions()
options.add_argument("--headless")
driver = webdriver.Chrome(options=options)
9. 注意事项
1.驱动版本:浏览器版本需与驱动版本匹配
2.元素定位失败:
检查是否加载完成(添加等待)
确认元素是否在 iframe 中(需要切换)
动态生成的元素可能需要重新定位