selenium使用详解--结合实际运用
selenium使用详解--结合实际运用
创建时间:20250617
一、安装selenium及驱动
pip install selenium
pip install selenium -i https://mirrors.aliyun.com/pypi/simple/ # 国内
安装驱动:
版本在114及以下: http://chromedriver.storage.googleapis.com/index.html
版本在127: https://googlechromelabs.github.io/chrome-for-testing/#stable
只需要大版本一样就行了,小版本不同没事。
在谷歌浏览器输入 chrome://version/ 即可查看版本
我的是 137.0.7151.104 (正式版本) (64 位) (cohort: Stable)
我下载的驱动是 137.0.7151.70 也可以使用的
https://storage.googleapis.com/chrome-for-testing-public/137.0.7151.70/win64/chromedriver-win64.zip
驱动下载之后解压在一个找得到的位置就好
二、基础使用技能
2.1 元素定位策略
- 优先使用唯一标识符:
By.ID>By.NAME>By.CSS_SELECTOR>By.XPATH - 动态内容处理:使用
WebDriverWait+expected_conditions替代固定等待
from selenium.webdriver.common.by import By
# 使用显式等+ By.ID
send_button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.ID, "send-preview"))
)
# 显式等待(最多等待10秒直到元素加载) + By.NAME
wait = WebDriverWait(driver, 10)
# 定位用户名输入框(根据实际页面结构修改选择器)
username_field = wait.until(EC.presence_of_element_located((By.NAME, "username")))
# 定位密码输入框
password_field = driver.find_element(By.NAME, "password")
# By.CSS_SELECTOR
login_button = driver.find_element(By.CSS_SELECTOR, "input.btn.btn-primary.btn-block ")
login_button = driver.find_element(By.CSS_SELECTOR, "button[value='save']")
# By.XPATH
login_button = driver.find_element(By.XPATH, '//*[@id="form"]/table[1]/tbody/tr[1]/td[8]/p[2]/a')




2.2 Selenium 中清除输入框内容
基础方法
# 定位输入框元素
input_box = driver.find_element(By.ID, "input_id")
# 清除内容(通用方法)
input_box.clear()
特殊方法
# 1. 当 clear() 失效时(常见于富文本编辑器)
# 方法1:模拟键盘操作(全选+删除)
from selenium.webdriver.common.keys import Keys
input_box.send_keys(Keys.CONTROL, 'a') # Windows/Linux
# input_box.send_keys(Keys.COMMAND, 'a') # Mac
input_box.send_keys(Keys.DELETE)
# 方法2:通过 JavaScript 强制清空
driver.execute_script("arguments[0].value = '';", input_box)
# 2.处理动态内容加载
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 等待元素可交互
input_box = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.ID, "input_id"))
)
input_box.clear()
2.3 控制台调试
$x("//button[@value='save']") // XPath测试
$$("button[value='save']") // CSS选择器测试

2.4 EC.presence_of_element_located和driver.find_element 区别
核心机制

使用场景
EC.presence_of_element_located 适用场景
-
页面加载较慢或元素动态生成时(如 AJAX 请求)
-
需要确保元素已存在于 DOM 中,但无需立即操作
-
配合
WebDriverWait使用,避免因元素未加载导致的失败from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待最多10秒,直到元素存在于DOM中 element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "dynamic-content")) )
driver.find_element 适用场景
-
页面已稳定加载,元素确定存在
-
需要立即操作元素(如点击、输入)
-
配合隐式等待(Implicit Wait)使用(但不推荐)
# 立即查找元素,无等待逻辑 element = driver.find_element(By.ID, "static-content")
2.5 无头浏览器设置
chrome_options = Options()
chrome_options.add_argument("--headless") # 启用无头模式
chrome_options.add_argument("--disable-gpu") # 禁用GPU加速(部分系统需要)
chrome_options.add_argument("--window-size=1920x1080") # 设置窗口大小
driver = webdriver.Chrome(options=chrome_options)

浙公网安备 33010602011771号