Selenium 全面指南

ops/2024/12/24 20:48:06/

Selenium 是一个强大的 Web 自动化工具,支持多种浏览器和语言绑定。


1. Selenium 的基本概念

  • WebDriver:Selenium 提供的核心接口,用于控制浏览器操作。
  • 显式等待:等待特定条件满足后再执行操作。
  • 隐式等待:全局设置一个等待时间,针对所有操作生效。
  • 定位器(Locators):用于定位页面元素的方法,如 ID、XPath、CSS 选择器等。

2. Selenium 的主要模块及 API

2.1 WebDriver

WebDriver 是 Selenium 的核心,用于与浏览器进行交互。

2.1.1 初始化浏览器
python">from selenium import webdriver# 启动 Chrome 浏览器
driver = webdriver.Chrome()# 打开指定网址
driver.get("https://www.example.com")# 最大化窗口
driver.maximize_window()# 关闭浏览器
driver.quit()

2.1.2 浏览器导航

python">driver.get("https://www.example.com")  # 打开网址
driver.back()  # 后退
driver.forward()  # 前进
driver.refresh()  # 刷新页面

2.2 定位元素

Selenium 提供多种方法来定位网页中的元素:

2.2.1 使用 find_elementfind_elements
python">from selenium.webdriver.common.by import By# 定位单个元素
element = driver.find_element(By.ID, "element_id")# 定位多个元素
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 输入内容
python">element = driver.find_element(By.ID, "username")
element.send_keys("test_user")
2.3.2 点击按钮
python">button = driver.find_element(By.ID, "submit_button")
button.click()
2.3.3 清空输入框
python">input_field = driver.find_element(By.ID, "input_field")
input_field.clear()
2.3.4 获取元素属性
python">element = driver.find_element(By.ID, "logo")
print(element.get_attribute("src"))
2.3.5 获取元素文本
python">element = driver.find_element(By.ID, "welcome_message")
print(element.text)

2.4 等待

Selenium 提供显式等待和隐式等待来处理动态加载页面。

2.4.1 隐式等待

隐式等待是全局设置,等待元素加载完成。

python">driver.implicitly_wait(10)  # 全局等待 10 秒
2.4.2 显式等待

显式等待针对特定元素或条件设置。

python">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.visibility_of_element_located((By.ID, "element_id"))
)
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 窗口操作
python"># 获取当前窗口句柄
current_window = driver.current_window_handle# 获取所有窗口句柄
all_windows = driver.window_handles# 切换到新窗口
driver.switch_to.window(all_windows[1])
2.5.2 iframe 切换
python"># 切换到 iframe
driver.switch_to.frame("iframe_name")# 返回主页面
driver.switch_to.default_content()
2.5.3 滚动页面
python"># 滚动到页面底部
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

2.6 Cookie 和 JavaScript

2.6.1 操作 Cookie
python"># 获取所有 Cookies
print(driver.get_cookies())# 添加 Cookie
driver.add_cookie({"name": "test", "value": "123"})# 删除 Cookie
driver.delete_cookie("test")
2.6.2 执行 JavaScript
python">driver.execute_script("alert('Hello, Selenium!')")

2.7 处理弹窗

python"># 等待弹窗出现
alert = WebDriverWait(driver, 10).until(EC.alert_is_present())# 获取弹窗文本
print(alert.text)# 接受弹窗
alert.accept()

3. 进阶技巧

3.1 动态 XPath

动态页面的元素属性可能变化,可以使用包含或正则表达式的 XPath:

python">element = driver.find_element(By.XPATH, "//button[contains(@class, 'submit')]")

 3.2 验证页面加载完成

python">WebDriverWait(driver, 10).until(lambda d: d.execute_script("return document.readyState") == "complete"
)


4. 常见问题和解决方案

  1. 元素未找到

    • 使用显式等待。
    • 检查选择器是否正确。
  2. 元素不可交互

    • 检查是否需要滚动或切换到 iframe。
    • 确保元素可见。
  3. 动态加载内容

    • 使用 WebDriverWait 处理延迟加载的内容。

5. 总结

Selenium 提供了丰富的 API,涵盖了浏览器操作、页面元素交互、动态等待等场景。熟练掌握这些 API,可以帮助我们轻松应对;爬虫、 Web 自动化测试的各种挑战。


http://www.ppmy.cn/ops/144664.html

相关文章

如何在 Ubuntu 22.04 上安装 Graylog 开源日志管理平台

简介 Graylog 的开源特性、丰富的功能、灵活性和可扩展性使其成为一个流行的日志管理平台。在本教程中,我将向你展示如何在 Ubuntu 22.04 上安装 Graylog,包括配置 Graylog 服务器软件包和访问 Graylog Web UI。 Graylog 是什么? Graylog …

PostgreSQL: 事务年龄

排查 在 PostgreSQL 数据库中,事务年龄(也称为事务 ID 年龄)是一个重要的监控指标,因为 PostgreSQL 使用事务 ID(XID)来保持事务的隔离性。每个事务都会被分配一个唯一的事务 ID,这个 ID 随着每…

【JAVA】JAVA接口公共返回体ResponseData封装

一、JAVA接口公共返回体ResponseData封装&#xff0c;使用泛型的经典 例子 public class ResponseData<T> implements Serializable { /** * */ private static final long serialVersionUID 7098362967623367826L; /** * 响应状态码 */ …

本地电脑使用命令行上传文件至远程服务器

将本地文件上传到远程服务器&#xff0c;在本地电脑中cmd使用该命令&#xff1a; scp C:/Users/"你的用户名"/Desktop/environment.yml ws:~/environment.yml 其中&#xff0c;C:/Users/“你的用户名”/Desktop/environment.yml是本地文件的路径&#xff0c; ~/en…

机器人角度参考方式

机器人的角度可以根据需求和系统设计来决定。通常情况下&#xff0c;机器人角度&#xff08;如航向角或偏航角&#xff09;有两种常见的参考方式&#xff1a; 参考开机时的 0&#xff1a;这是最常见的方式&#xff0c;机器人在开机时会将当前的方向作为 0&#xff08;即参考方向…

typora数学符号

typora数学符号 Typora 是一个支持 LaTeX 数学公式的优秀 Markdown 编辑器&#xff0c;可以直接编写数学公式并实时渲染。以下是如何在 Typora 中使用数学公式的详细指南&#xff1a; 1. 启用数学公式支持 默认情况下&#xff0c;Typora 支持 LaTeX 格式的数学公式&#xff0…

STM32-笔记6-震动控制灯(中断法)

1、复制06工程文件&#xff0c;重命名07-震动控制灯&#xff08;中断法&#xff09; 打开工程文件 打开exti.c文件 将震动传感器的DO口接32板的A4引脚 更改代码 2、代码&#xff08;老师的&#xff09; exti.c #include "sys.h" #include "exti.h" …

从用户视角出发:用例图分析家政预约小程序

目录 1 引言&#xff1a;什么是用例图&#xff1f;它解决了什么问题&#xff1f;2 如何绘制用例图&#xff1f;2.1 绘制步骤 3 家政预约小程序用例图分析4 顾客用例详细分析4.1 注册/登录4.2 浏览服务4.3 搜索服务4.4 查看服务详情4.5 预订服务4.6 支付订单4.7 取消订单4.8 评价…