Selenium 全面指南

[复制链接]
发表于 2025-11-22 15:27:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
Selenium 是一个强盛的 Web 自动化工具,支持多种欣赏器和语言绑定。

1. Selenium 的根本概念


  • WebDriver:Selenium 提供的焦点接口,用于控制欣赏器操纵。
  • 显式期待:期待特定条件满足后再实行操纵。
  • 隐式期待:全局设置一个期待时间,针对全部操纵收效。
  • 定位器(Locators):用于定位页面元素的方法,如 ID、XPath、CSS 选择器等。

2. Selenium 的重要模块及 API

2.1 WebDriver

WebDriver 是 Selenium 的焦点,用于与欣赏器举行交互。
2.1.1 初始化欣赏器
  1. from selenium import webdriver
  2. # 启动 Chrome 浏览器
  3. driver = webdriver.Chrome()
  4. # 打开指定网址
  5. driver.get("https://www.example.com")
  6. # 最大化窗口
  7. driver.maximize_window()
  8. # 关闭浏览器
  9. driver.quit()
复制代码
2.1.2 欣赏器导航
  1. driver.get("https://www.example.com")  # 打开网址
  2. driver.back()  # 后退
  3. driver.forward()  # 前进
  4. driver.refresh()  # 刷新页面
复制代码

2.2 定位元素

Selenium 提供多种方法来定位网页中的元素:
2.2.1 利用 find_element 和 find_elements
  1. from selenium.webdriver.common.by import By
  2. # 定位单个元素
  3. element = driver.find_element(By.ID, "element_id")
  4. # 定位多个元素
  5. elements = driver.find_elements(By.CLASS_NAME, "class_name")
复制代码
2.2.2 常用定位器

定位器用法示例IDdriver.find_element(By.ID, "element_id")Namedriver.find_element(By.NAME, "name")Classdriver.find_element(By.CLASS_NAME, "class")Tagdriver.find_element(By.TAG_NAME, "tag")CSSdriver.find_element(By.CSS_SELECTOR, ".class")XPathdriver.find_element(By.XPATH, "//tag[@attr='value']")
2.3 操纵页面元素

2.3.1 输入内容
  1. element = driver.find_element(By.ID, "username")
  2. element.send_keys("test_user")
复制代码
2.3.2 点击按钮
  1. button = driver.find_element(By.ID, "submit_button")
  2. button.click()
复制代码
2.3.3 清空输入框
  1. input_field = driver.find_element(By.ID, "input_field")
  2. input_field.clear()
复制代码
2.3.4 获取元素属性
  1. element = driver.find_element(By.ID, "logo")
  2. print(element.get_attribute("src"))
复制代码
2.3.5 获取元素文本
  1. element = driver.find_element(By.ID, "welcome_message")
  2. print(element.text)
复制代码

2.4 期待

Selenium 提供显式期待和隐式期待来处置处罚动态加载页面。
2.4.1 隐式期待

隐式期待是全局设置,期待元素加载完成。
  1. driver.implicitly_wait(10)  # 全局等待 10 秒
复制代码
2.4.2 显式期待

显式期待针对特定元素或条件设置。
  1. from selenium.webdriver.common.by import By
  2. from selenium.webdriver.support.ui import WebDriverWait
  3. from selenium.webdriver.support import expected_conditions as EC
  4. # 等待元素可见
  5. element = WebDriverWait(driver, 10).until(
  6.     EC.visibility_of_element_located((By.ID, "element_id"))
  7. )
复制代码
2.4.3 常用条件

条件形貌presence_of_element_located元素出如今 DOM 中,但不肯定可见。visibility_of_element_located元素出如今 DOM 且可见。element_to_be_clickable元素可点击。url_changes页面 URL 发生变革。alert_is_present弹窗出现。
2.5 页面操纵

2.5.1 窗口操纵
  1. # 获取当前窗口句柄
  2. current_window = driver.current_window_handle
  3. # 获取所有窗口句柄
  4. all_windows = driver.window_handles
  5. # 切换到新窗口
  6. driver.switch_to.window(all_windows[1])
复制代码
2.5.2 iframe 切换
  1. # 切换到 iframe
  2. driver.switch_to.frame("iframe_name")
  3. # 返回主页面
  4. driver.switch_to.default_content()
复制代码
2.5.3 滚动页面
  1. # 滚动到页面底部
  2. driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
复制代码

2.6 Cookie 和 JavaScript

2.6.1 操纵 Cookie
  1. # 获取所有 Cookies
  2. print(driver.get_cookies())
  3. # 添加 Cookie
  4. driver.add_cookie({"name": "test", "value": "123"})
  5. # 删除 Cookie
  6. driver.delete_cookie("test")
复制代码
2.6.2 实行 JavaScript
  1. driver.execute_script("alert('Hello, Selenium!')")
复制代码

2.7 处置处罚弹窗
  1. # 等待弹窗出现
  2. alert = WebDriverWait(driver, 10).until(EC.alert_is_present())
  3. # 获取弹窗文本
  4. print(alert.text)
  5. # 接受弹窗
  6. alert.accept()
复制代码

3. 进阶本领

3.1 动态 XPath

动态页面的元素属性大概变革,可以利用包罗或正则表达式的 XPath:
  1. element = driver.find_element(By.XPATH, "//button[contains(@class, 'submit')]")
复制代码
 3.2 验证页面加载完成
  1. WebDriverWait(driver, 10).until(
  2.     lambda d: d.execute_script("return document.readyState") == "complete"
  3. )
复制代码

4. 常见题目和办理方案


  •         元素未找到

    • 利用显式期待。
    • 查抄选择器是否精确。

  •         元素不可交互

    • 查抄是否须要滚动或切换到 iframe。
    • 确保元素可见。

  •         动态加载内容

    • 利用 WebDriverWait 处置处罚延伸加载的内容。


5. 总结

Selenium 提供了丰富的 API,涵盖了欣赏器操纵、页面元素交互、动态期待等场景。熟练把握这些 API,可以资助我们轻松应对;爬虫、 Web 自动化测试的各种寻衅。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表