Selenium 使用方法一览表(基于 Selenium 4.x)

Selenium 使用方法一览表(基于 Selenium 4.x)

Selenium 是自动化测试/网页爬虫常用工具,核心用于模拟浏览器交互。以下按「环境搭建→核心操作→常用场景→进阶技巧→注意事项」分类整理,方便快速查阅。

一、环境搭建

1. 依赖安装

操作 命令/步骤
安装 Selenium pip install selenium(推荐 4.x 版本,兼容更多浏览器特性)
安装浏览器驱动 需与浏览器版本匹配,推荐用 webdriver-manager 自动管理:pip install webdriver-manager
支持浏览器 Chrome(首选)、Firefox、Edge、Safari

2. 驱动自动配置(无需手动下载)

浏览器 代码示例(Python)
Chrome from selenium import webdriver; from selenium.webdriver.chrome.service import Service; from webdriver_manager.chrome import ChromeDriverManager; driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
Firefox from webdriver_manager.firefox import GeckoDriverManager; driver = webdriver.Firefox(service=Service(GeckoDriverManager().install()))
Edge from webdriver_manager.microsoft import EdgeChromiumDriverManager; driver = webdriver.Edge(service=Service(EdgeChromiumDriverManager().install()))

二、核心基础操作

1. 浏览器控制

功能 代码示例
打开网页 driver.get("https://www.baidu.com")
刷新页面 driver.refresh()
后退 driver.back()
前进 driver.forward()
设置窗口大小 driver.set_window_size(1920, 1080)(宽/高)或 driver.maximize_window()(最大化)
获取当前URL driver.current_url
获取页面标题 driver.title
截图保存 driver.save_screenshot("截图路径.png")
关闭当前标签页 driver.close()
关闭浏览器(所有标签) driver.quit()

2. 元素定位(核心)

需先导入 from selenium.webdriver.common.by import By,支持 8 种定位方式:

定位方式 语法格式 适用场景 示例
ID driver.find_element(By.ID, "id值") 元素有唯一ID(首选) driver.find_element(By.ID, "kw")(百度搜索框)
Name driver.find_element(By.NAME, "name值") 元素有name属性 driver.find_element(By.NAME, "wd")
Class Name driver.find_element(By.CLASS_NAME, "类名") 元素有class属性(注意:类名含空格需拆分) driver.find_element(By.CLASS_NAME, "s_ipt")
Tag Name driver.find_element(By.TAG_NAME, "标签名") 页面唯一标签(如 <title> driver.find_element(By.TAG_NAME, "input")
Link Text driver.find_element(By.LINK_TEXT, "链接文本") 超链接完整文本匹配 driver.find_element(By.LINK_TEXT, "新闻")
Partial Link Text driver.find_element(By.PARTIAL_LINK_TEXT, "部分文本") 超链接部分文本匹配 driver.find_element(By.PARTIAL_LINK_TEXT, "新")
XPath driver.find_element(By.XPATH, "xpath表达式") 通用定位(复杂场景首选) 绝对路径:/html/body/div[1]/input;相对路径://input[@id="kw"]
CSS Selector driver.find_element(By.CSS_SELECTOR, "css表达式") 定位效率高于XPath driver.find_element(By.CSS_SELECTOR, "#kw")(ID选择器)、.s_ipt(类选择器)

说明:find_element() 返回单个元素,find_elements() 返回元素列表(无匹配时返回空列表,不报错)。

3. 元素交互操作

操作 代码示例 适用元素
输入文本 element.send_keys("输入内容") 输入框(input、textarea)
清空输入框 element.clear() 输入框
点击元素 element.click() 按钮、链接、复选框等可点击元素
提交表单 element.submit() 表单内元素(等价于点击提交按钮)
获取元素文本 element.text 非输入框元素(如div、span、链接)
获取元素属性 element.get_attribute("属性名")(如 srchrefvalue 所有元素
获取输入框当前值 element.get_attribute("value") 输入框(input)
判断元素是否可见 element.is_displayed()(返回布尔值) 所有元素
判断元素是否可用 element.is_enabled() 输入框、按钮等
判断复选框是否选中 element.is_selected() 复选框、单选框

三、常用场景操作

1. 等待机制(解决元素加载延迟)

等待类型 语法格式 特点 示例
隐式等待 driver.implicitly_wait(10)(单位:秒) 全局等待,所有元素定位最多等待N秒 初始化后调用:driver.implicitly_wait(10)
显式等待 WebDriverWait(driver, 超时时间).until(条件) 针对单个元素的精准等待(推荐) from selenium.webdriver.support.ui import WebDriverWait; from selenium.webdriver.support import expected_conditions as EC; WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "kw")))
强制等待 time.sleep(3)(单位:秒) 固定等待N秒(不推荐,效率低) import time; time.sleep(3)

显式等待常用条件:EC.presence_of_element_located(元素存在)、EC.visibility_of_element_located(元素可见)、EC.element_to_be_clickable(元素可点击)。

2. 窗口/标签页切换

功能 代码示例
获取所有窗口句柄 handles = driver.window_handles(返回列表,按打开顺序排列)
切换到最新打开的窗口 driver.switch_to.window(handles[-1])
切换到指定窗口 driver.switch_to.window("窗口句柄")
切换到iframe框架 driver.switch_to.frame("iframe的ID/name/元素")(无ID时先定位iframe元素)
退出iframe框架 driver.switch_to.default_content()

3. 下拉框操作(需导入 Select 类)

功能 代码示例
初始化下拉框 from selenium.webdriver.support.ui import Select; select = Select(element)
按索引选择(0开始) select.select_by_index(0)
按value属性选择 select.select_by_value("value值")
按可见文本选择 select.select_by_visible_text("选项文本")
取消所有选择(仅多选) select.deselect_all()
获取所有选项 select.options(返回选项元素列表)

4. 文件上传/下载

操作 代码示例
文件上传(input类型) 定位上传按钮后直接传入文件路径:element.send_keys("本地文件绝对路径")
文件下载(Chrome) 配置下载路径:options = webdriver.ChromeOptions(); prefs = {"download.default_directory": "下载路径"}; options.add_experimental_option("prefs", prefs); driver = webdriver.Chrome(options=options)

5. 弹窗处理(Alert/Confirm/Prompt)

弹窗类型 操作代码
切换到弹窗 alert = driver.switch_to.alert
点击确定 alert.accept()
点击取消 alert.dismiss()(仅Confirm/Prompt)
输入文本 alert.send_keys("输入内容")(仅Prompt)
获取弹窗文本 alert.text

四、进阶技巧

1. 浏览器配置(Options)

功能 代码示例(Chrome)
无头模式(无界面运行) options.add_argument("--headless=new")(Selenium 4.x 推荐,旧版用 --headless
禁用图片加载 prefs = {"profile.managed_default_content_settings.images": 2}; options.add_experimental_option("prefs", prefs)
设置User-Agent options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0")
忽略SSL错误 options.add_argument("--ignore-certificate-errors")
最大化启动 options.add_argument("--start-maximized")

2. 执行JavaScript代码

功能 代码示例
执行JS语句 driver.execute_script("JS代码")
滚动到页面底部 driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
滚动到元素可见 driver.execute_script("arguments[0].scrollIntoView();", element)
修改元素属性 driver.execute_script("arguments[0].setAttribute('属性名', '新值')", element)

3. Page Object 设计模式(PO模式)

核心思想:将页面封装为类,提高代码复用性和可维护性。

python 复制代码
class BaiduPage:
    def __init__(self, driver):
        self.driver = driver
        self.url = "https://www.baidu.com"
        self.search_input = (By.ID, "kw")  # 元素定位表达式封装
        self.search_btn = (By.ID, "su")
    
    def open(self):
        self.driver.get(self.url)
    
    def search(self, keyword):
        # 显式等待元素可见并输入
        WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(self.search_input)).send_keys(keyword)
        # 点击搜索按钮
        self.driver.find_element(*self.search_btn).click()

# 使用示例
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
baidu_page = BaiduPage(driver)
baidu_page.open()
baidu_page.search("Selenium")
driver.quit()

五、注意事项

  1. 版本兼容 :Selenium 4.x 废弃了旧版 find_element_by_* 方法(如 find_element_by_id),统一使用 find_element(By.XXX, value)
  2. 等待优先级:显式等待 > 隐式等待 > 强制等待,避免混用隐式和显式等待(可能导致等待时间叠加)。
  3. 元素定位原则:优先用 ID/Name(高效),复杂场景用 XPath/CSS Selector(灵活),避免使用绝对 XPath(易维护性差)。
  4. 反爬规避 :合理设置等待时间、使用真实 User-Agent、避免高频次操作,必要时配置代理(options.add_argument("--proxy-server=http://代理IP:端口"))。
  5. 异常处理 :建议用 try-except 捕获元素未找到、超时等异常(如 NoSuchElementExceptionTimeoutException)。
  6. 资源释放 :测试/爬虫结束后必须调用 driver.quit(),避免浏览器进程残留。

六、常用异常(需导入)

python 复制代码
from selenium.common.exceptions import (
    NoSuchElementException,    # 元素未找到
    TimeoutException,         # 超时
    ElementNotVisibleException, # 元素不可见
    ElementNotInteractableException # 元素不可交互
)
相关推荐
阿蔹1 小时前
JavaWeb-Selenium 配置以及Selenim classnotfound问题解决
java·软件测试·python·selenium·测试工具·自动化
天才测试猿4 小时前
树控件、下拉框、文本框常用测试用例
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
Wpa.wk5 小时前
selenium自动化测试-简单PO模式 (java版)
java·自动化测试·selenium·测试工具·po模式
一念一花一世界6 小时前
接口管理工具选型:Postman、Swagger与PostIn的全面对比指南
测试工具·postman·swagger·接口管理工具
程序员杰哥7 小时前
UI自动化测试框架:PO 模式+数据驱动
自动化测试·软件测试·python·selenium·测试工具·ui·测试用例
安然无虞9 小时前
LoadRunner性能测试详解·下
python·测试工具·压力测试
嫂子的姐夫9 小时前
01-selenium
爬虫·python·selenium·自动化
00后程序员张10 小时前
Fiddler调试工具全面解析 HTTPHTTPS抓包、代理设置与接口测试实战教程
前端·测试工具·ios·小程序·fiddler·uni-app·webview