一文掌握Selenium的详细使用

news/2025/2/27 0:34:56

文章目录

    • 1. 安装 Selenium
      • 1.1 安装 Selenium 库
      • 1.2 下载浏览器驱动
    • 2. 基础用法
      • 2.1 启动浏览器
      • 2.2 查找元素
      • 2.3 操作元素
    • 3. 高级功能
      • 3.1 等待机制
      • 3.2 处理弹窗
      • 3.3 执行 JavaScript
      • 3.4 切换窗口或 iframe
      • 3.5 处理 Cookies
      • 3.6 截图
      • 3.7 处理下拉菜单
    • 4. 浏览器选项
      • 4.1 无头模式(Headless)
      • 4.2 禁用图片加载
      • 4.3 设置代理
    • 5. 常见应用场景
      • 5.1 自动化登录
      • 5.2 抓取动态加载数据
      • 5.3 登录网站并获取数据
    • 6. 注意事项
    • 6. 总结

Selenium 是一个用于自动化浏览器操作的工具,广泛用于 Web 自动化测试、数据抓取和网页交互。它支持多种浏览器(如 Chrome、Firefox、Edge 等)和编程语言(如 Python、Java、C# 等)。本文将详细介绍如何使用 Python 中的 Selenium 进行浏览器自动化操作。

1. 安装 Selenium

1.1 安装 Selenium 库

使用 pip 安装 Selenium:pip install selenium

1.2 下载浏览器驱动

Selenium 需要通过浏览器驱动来控制浏览器。常用的浏览器驱动如下:

Chrome: ChromeDriver

Firefox: GeckoDriver

Edge: Microsoft Edge WebDriver

下载与浏览器版本匹配的驱动,并将其路径添加到系统的环境变量中,或者直接在代码中指定驱动路径。

2. 基础用法

2.1 启动浏览器

以下示例以 Chrome 浏览器为例:

from selenium import webdriver

# 指定 ChromeDriver 路径
driver_path = '/path/to/chromedriver'

# 创建浏览器实例
driver = webdriver.Chrome(executable_path=driver_path)

# 打开网页
driver.get('https://www.example.com')

# 关闭浏览器
driver.quit()

2.2 查找元素

Selenium 提供了多种查找元素的方法:
find_element_by_id() 通过 ID 查找元素
find_element_by_name() 通过 Name 查找元素
find_element_by_class_name() 通过 Class Name 查找元素
find_element_by_tag_name() 通过 Tag Name 查找元素
find_element_by_css_selector() 通过 CSS 选择器查找元素
find_element_by_xpath() 通过 XPath 查找元素
find_element_by_link_text() 通过链接文本查找元素
find_element_by_partial_link_text() 通过部分链接文本查找元素

示例:

# 通过 ID 查找
element = driver.find_element(By.ID, "element-id")

# 通过类名查找
element = driver.find_element(By.CLASS_NAME, "element-class")

# 通过标签名查找
element = driver.find_element(By.TAG_NAME, "div")

# 通过 CSS 选择器查找
element = driver.find_element(By.CSS_SELECTOR, "div.class-name")

# 通过 XPath 查找
element = driver.find_element(By.XPATH, "//div[@id='element-id']")

2.3 操作元素

找到元素后,可以对其进行各种操作:

输入文本:

element = driver.find_element_by_name('q')
element.send_keys('Selenium')

点击元素:

element = driver.find_element_by_id('submit-button')
element.click()

获取元素属性:

element = driver.find_element_by_id('element-id')
print(element.get_attribute('value'))  # 获取 value 属性

获取元素文本:

element = driver.find_element_by_class_name('class-name')
print(element.text)  # 获取元素的文本内容

3. 高级功能

3.1 等待机制

Selenium 提供了显式等待和隐式等待机制,用于处理页面加载或元素加载的延迟。

显式等待:显式等待会等待某个条件成立后再继续执行。

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 等待最多 10 秒,直到元素出现
element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, 'element-id'))

隐式等待:隐式等待会在查找元素时等待一定时间。

driver.implicitly_wait(10)  # 设置隐式等待时间为 10 秒

3.2 处理弹窗

Selenium 可以处理浏览器的弹窗(如警告框、确认框、提示框)。

# 切换到弹窗
alert = driver.switch_to.alert

# 获取弹窗文本
print(alert.text)

# 接受弹窗(点击确定)
alert.accept()

# 拒绝弹窗(点击取消)
alert.dismiss()

3.3 执行 JavaScript

可以通过 execute_script() 方法执行 JavaScript 代码。

# 滚动页面到底部
driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')

# 修改元素属性
driver.execute_script('document.getElementById("element-id").style.backgroundColor = "yellow";')

3.4 切换窗口或 iframe

切换窗口:当打开新窗口时,需要切换到新窗口。

# 获取当前窗口句柄
main_window = driver.current_window_handle

# 打开新窗口
driver.find_element_by_link_text('Open New Window').click()

# 切换到新窗口
for handle in driver.window_handles:
    if handle != main_window:
        driver.switch_to.window(handle)

# 切换回主窗口
driver.switch_to.window(main_window)

切换 iframe:如果需要操作 iframe 中的元素,需要先切换到 iframe。

# 通过 ID 或 Name 切换
driver.switch_to.frame('iframe-id')

# 切换回主页面
driver.switch_to.default_content()

3.5 处理 Cookies

Selenium 可以操作浏览器的 Cookies。

# 添加 Cookie
driver.add_cookie({'name': 'key', 'value': 'value'})

# 获取 Cookie
print(driver.get_cookie('key'))

# 删除 Cookie
driver.delete_cookie('key')

# 删除所有 Cookies
driver.delete_all_cookies()

3.6 截图

可以截取当前页面的屏幕截图。

# 截图并保存
driver.save_screenshot('screenshot.png')

3.7 处理下拉菜单

from selenium.webdriver.support.ui import Select

# 找到下拉菜单元素
select_element = driver.find_element(By.ID, "dropdown")

# 创建 Select 对象
select = Select(select_element)

# 通过文本选择
select.select_by_visible_text("Option 1")

# 通过值选择
select.select_by_value("value1")

# 通过索引选择
select.select_by_index(0)

4. 浏览器选项

4.1 无头模式(Headless)

from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--headless")  # 启用无头模式
driver = webdriver.Chrome(options=options)

4.2 禁用图片加载

chrome_options = Options()
chrome_options.add_argument("--blink-settings=imagesEnabled=false")
driver = webdriver.Chrome(options=chrome_options)

4.3 设置代理

chrome_options = Options()
chrome_options.add_argument("--proxy-server=http://your-proxy-server:port")
driver = webdriver.Chrome(options=chrome_options)

5. 常见应用场景

5.1 自动化登录

from selenium import webdriver

driver = webdriver.Chrome(executable_path='/path/to/chromedriver')
driver.get('https://www.example.com/login')

# 输入用户名和密码
driver.find_element_by_name('username').send_keys('your-username')
driver.find_element_by_name('password').send_keys('your-password')

# 点击登录按钮
driver.find_element_by_id('login-button').click()

driver.quit()

5.2 抓取动态加载数据

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome(executable_path='/path/to/chromedriver')
driver.get('https://www.example.com/dynamic-content')

# 等待动态内容加载
element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CLASS_NAME, 'dynamic-content'))
print(element.text)

driver.quit()

5.3 登录网站并获取数据

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 启动浏览器
driver = webdriver.Chrome()

# 打开登录页面
driver.get("https://www.example.com/login")

# 输入用户名和密码
driver.find_element(By.ID, "username").send_keys("your_username")
driver.find_element(By.ID, "password").send_keys("your_password")

# 点击登录按钮
driver.find_element(By.ID, "submit-button").click()

# 等待页面加载完成
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "dashboard"))
)

# 获取数据
data = driver.find_element(By.ID, "data").text
print(data)

# 关闭浏览器
driver.quit()

6. 注意事项

​驱动版本匹配:确保浏览器驱动与浏览器版本匹配,否则会报错。

​反爬虫机制:部分网站会检测 Selenium 的使用,可以通过禁用自动化标志或使用代理绕过检测。

​性能优化:在爬虫中尽量减少不必要的操作(如滚动、点击),以提高效率。

​异常处理:使用 try-except 捕获异常,避免程序崩溃。

6. 总结

Selenium 是一个功能强大的浏览器自动化工具,适用于 Web 自动化测试、数据抓取和网页交互。通过掌握其基础用法和高级功能,你可以轻松实现各种浏览器自动化任务。在实际使用中,建议结合显式等待和异常处理,以提高脚本的稳定性和可靠性。

参考文档
Selenium 官方文档:https://www.selenium.dev/documentation/
ChromeDriver 下载:https://sites.google.com/chromium.org/driver/
GeckoDriver 下载:https://github.com/mozilla/geckodriver


http://www.niftyadmin.cn/n/5869316.html

相关文章

Jenkins垃圾清理指南

文章目录 1. Jenkins是什么2. 哪些部分容易产生垃圾3. Jenkins垃圾清理方案3.1 单Job配置:自动清理旧构建3.2 全局统一清理:Slicing插件批量操作3.3 本地缓存清理 4. 空间预警 1. Jenkins是什么 Jenkins是一款开源的持续集成与持续交付(CI/C…

Dify部署

Dify部署 安装docker 要在CentOS 7上部署Docker社区版,您可以按照以下步骤进行操作: 卸载旧版本的Docker(如果有): yum remove docker docker-client docker-client-latest docker-common docker-latest docker-l…

简易电子秤系统机理分析与改进

一、引言 简易电子秤作为日常生活与商业活动中常用的称重设备,其准确性、稳定性和便捷性至关重要。了解其系统机理,有助于发现潜在问题并进行针对性改进,以满足不断提高的使用需求。 二、系统机理剖析 (一)传感器工作原理 简易电子秤核心部件之一是压力传感器,常见的…

【R语言】dplyr包经典函数summarise函数

dplyr包经典函数summarise函数,后面改名乘reframe函数了,但是summarise仍然适用 这个函数的返回结果是一个新的数据框,下面讲一下几种常见用法 示例数据为R自带的数据集mtcars 1.不分组 mtcars %>%summarise(mean mean(disp), n n()…

SSD 固态硬盘存储密度的分区

SSD(固态硬盘)的存储密度是指在单位物理空间内所能存储的数据量,它是衡量 SSD 性能和成本效益的关键指标之一。下面从影响因素、不同闪存类型的存储密度表现、存储密度提升的意义和挑战等方面进行分析: 影响 SSD 存储密度的因素 …

2024年12月 GESP C++等级考试真题 一级

2024年12月 GESP C等级考试真题 一级 gesp试卷真题可前往下方链接查看,支持在线答题,在线测评~ GESP C等级考试 一级(2024年12月)_c_少儿编程题库学习中心-嗨信奥https://www.hixinao.com/tidan/cpp/show-241.html?_…

姿态矩阵/旋转矩阵/反对称阵

物理意义,端点矢量角速率叉乘本身向量; 负号是动系b看固定系i是相反的; 一个固定 在惯性导航解算中,旋转矢量的叉乘用于描述姿态矩阵的微分方程。你提到的公式中, ω i b b \boldsymbol{\omega}_{ib}^b \times ωibb…

QT MD5校验文件和数据的完整性

MD5介绍: ‌MD5,全称为‌‌Message-Digest Algorithm 5(消息摘要算法5)‌,是一种广泛使用的密码散列函数。它可以将任意长度的“字节串”变换成一个128位(16字节)的散列值(hash valu…