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_locateddriver.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)
posted @ 2025-06-17 12:01  随风小屋  阅读(359)  评论(0)    收藏  举报