当前位置: 首页 > news >正文

Selenium 使用指南:从入门到精通

Selenium 使用指南:从入门到精通

Selenium 是一个用于自动化 Web 浏览器操作的强大工具,广泛应用于自动化测试和 Web 数据爬取中。本文将带你从入门到精通地掌握 Selenium,涵盖其基本操作、常用用法以及一个完整的图片爬取示例。

1. 环境配置

1.1 安装 Selenium

在 Python 环境中,可以通过 pip 安装 Selenium:

pip install selenium

1.2 下载 WebDriver

Selenium 需要与特定浏览器的 WebDriver 一起使用。例如,若使用 Chrome 浏览器,需要下载 ChromeDriver 并确保路径已配置好。

1.3 设置 WebDriver 路径

将下载的 WebDriver 解压后,路径可以设置到系统环境变量中,或在代码中指定其位置。

2. Selenium 基本用法

2.1 启动浏览器并打开页面

from selenium import webdriver# 创建 Chrome 浏览器实例并指定 WebDriver 路径
driver = webdriver.Chrome(executable_path=r'C:\Program Files\Google\Chrome\Application\chromedriver.exe')# 打开网页
driver.get('https://www.example.com')# 关闭浏览器
driver.quit()

2.2 查找元素

可以通过多种方式查找页面中的元素:

# 通过 ID
element_by_id = driver.find_element_by_id('element-id')# 通过 name
element_by_name = driver.find_element_by_name('element-name')# 通过 class
element_by_class = driver.find_element_by_class_name('element-class')# 通过 tag
element_by_tag = driver.find_element_by_tag_name('tag-name')# 通过 CSS selector
element_by_css = driver.find_element_by_css_selector('css.selector')# 通过 XPath
element_by_xpath = driver.find_element_by_xpath('//tag[@attribute="value"]')

2.3 交互操作

2.3.1 点击事件
# 查找并点击按钮
button = driver.find_element_by_id('button-id')
button.click()
2.3.2 输入文本
# 查找输入框并输入文本
input_box = driver.find_element_by_name('input-name')
input_box.send_keys('Hello, World!')

2.4 获取元素属性和文本

# 获取属性值
attribute_value = element_by_id.get_attribute('attribute-name')# 获取文本内容
text_content = element_by_id.text

2.5 等待元素加载

在某些情况下,需要等待元素加载完成:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECelement = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'element-id'))
)

2.6 处理弹窗和多窗口

2.6.1 处理 JavaScript 弹窗
# 切换并接受弹窗
alert = driver.switch_to.alert
alert.accept()
2.6.2 切换窗口
# 获取所有窗口句柄
handles = driver.window_handles# 切换到新窗口
driver.switch_to.window(handles[1])

2.7 执行 JavaScript

# 滚动页面到元素
driver.execute_script("arguments[0].scrollIntoView();", element_by_id)

2.8 截图

# 保存当前页面截图
driver.save_screenshot('screenshot.png')

2.9 管理 Cookies

# 获取所有 Cookies
cookies = driver.get_cookies()# 添加新 Cookie
driver.add_cookie({'name': 'key', 'value': 'value'})# 删除一个 Cookie
driver.delete_cookie('key')# 删除所有 Cookies
driver.delete_all_cookies()

3. 高级用法:爬取网页图片

3.1 爬取示例代码

以下是一个使用 Selenium 爬取网页图片的完整示例:

from selenium import webdriver
import os
import urllib.request# 设置 ChromeDriver 路径并打开浏览器
driver = webdriver.Chrome(executable_path='path/to/chromedriver')# 打开目标网页
driver.get('https://www.example.com')# 查找所有图片元素
images = driver.find_elements_by_tag_name('img')# 创建保存图片的文件夹
os.makedirs('downloaded_images', exist_ok=True)# 下载所有图片
for i, img in enumerate(images):src = img.get_attribute('src')if src:print(f"Downloading image {i+1}: {src}")# 下载并保存图片urllib.request.urlretrieve(src, f'downloaded_images/image_{i+1}.jpg')# 关闭浏览器
driver.quit()import urllib.request
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://netflav.com/trending")
element_by_id = driver.find_element(By.ID, 'kw')
element_by_id.send_keys("hello")
driver.find_element(By.ID, 'su').click()
plants = driver.find_elements(By.TAG_NAME, "img")
for idx, img_element in enumerate(plants):img_url = img_element.get_attribute('src')urllib.request.urlretrieve(src, f'image_{idx+1}.jpg')
driver.quit()

3.2 代码解释

  • 导入库并设置 WebDriver:导入 Selenium 和 Python 标准库用于文件操作和 HTTP 请求。
  • 打开网页并获取图片元素:使用 find_elements_by_tag_name('img') 获取所有图片元素。
  • 下载图片:遍历图片元素,获取 src 属性并下载图片到本地。

4. 总结

通过本文的介绍,相信你已经对 Selenium 的基本操作和高级应用有了全面的了解。Selenium 是一个强大且灵活的工具,在自动化测试和数据爬取中都能提供极大便利。通过学习和实践这些功能,可以极大地提升自动化流程的效率。希望这篇文章能帮助你更好地掌握 Selenium。

相关文章:

Selenium 使用指南:从入门到精通

Selenium 使用指南:从入门到精通 Selenium 是一个用于自动化 Web 浏览器操作的强大工具,广泛应用于自动化测试和 Web 数据爬取中。本文将带你从入门到精通地掌握 Selenium,涵盖其基本操作、常用用法以及一个完整的图片爬取示例。 1. 环境配…...

笔试-排列组合

应用 一个长度为[1, 50]、元素都是字符串的非空数组,每个字符串的长度为[1, 30],代表非负整数,元素可以以“0”开头。例如:[“13”, “045”,“09”,“56”]。 将所有字符串排列组合,拼起来组成…...

Java序列化详解

1 什么是序列化、反序列化 在Java编程实践中,当我们需要持久化Java对象,比如把Java对象保存到文件里,或是在网络中传输Java对象时,序列化机制就发挥着关键作用。 序列化:指的是把数据结构或对象转变为可存储、可传输的…...

ChatGPT与GPT的区别与联系

ChatGPT 和 GPT 都是基于 Transformer 架构的语言模型,但它们有不同的侧重点和应用。下面我们来探讨一下它们的区别与联系。 1. GPT(Generative Pre-trained Transformer) GPT 是一类由 OpenAI 开发的语言模型,基于 Transformer…...

MySQL入门 – CRUD基本操作

MySQL入门 – CRUD基本操作 Essential CRUD Manipulation to MySQL Database By JacksonML 本文简要介绍操作MySQL数据库的基本操作,即创建(Create), 读取(Read), 更新(Update)和删除(Delete)。 基于数据表的关系型…...

Redis背景介绍

⭐️前言⭐️ 本文主要做Redis相关背景介绍,包括核心能力、重要特性和使用场景。 🍉欢迎点赞 👍 收藏 ⭐留言评论 🍉博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言 🍉博客中涉及源码及博主…...

PPT演示设置:插入音频同步切换播放时长计算

PPT中插入音频&同步切换&放时长计算 一、 插入音频及音频设置二、设置页面切换和音频同步三、播放时长计算 一、 插入音频及音频设置 1.插入音频:点击菜单栏插入-音频-选择PC上的音频(已存在的音频)或者录制音频(现场录制…...

DIFY源码解析

偶然发现Github上某位大佬开源的DIFY源码注释和解析,目前还处于陆续不断更新地更新过程中,为大佬的专业和开源贡献精神点赞。先收藏链接,后续慢慢学习。 相关链接如下: DIFY源码解析...

[权限提升] Wdinwos 提权 维持 — 系统错误配置提权 - Trusted Service Paths 提权

关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01:Trusted Service Paths 提权原理 Windows 的服务通常都是以 System 权限运行的,所以系统在解析服务的可执行文件路径中的空格的时候也会以 System 权限进行解析&a…...

【算法】回溯算法专题② ——组合型回溯 + 剪枝 python

目录 前置知识进入正题小试牛刀实战演练总结 前置知识 【算法】回溯算法专题① ——子集型回溯 python 进入正题 组合https://leetcode.cn/problems/combinations/submissions/596357179/ 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以…...

LeetCode:121.买卖股票的最佳时机1

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:121.买卖股票的最佳时机1 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票…...

pytorch生成对抗网络

人工智能例子汇总:AI常见的算法和例子-CSDN博客 生成对抗网络(GAN,Generative Adversarial Network)是一种深度学习模型,由两个神经网络组成:生成器(Generator)和判别器&#xff0…...

Visual Studio Code应用本地部署的deepseek

1.打开Visual Studio Code,在插件中搜索continue,安装插件。 2.添加新的大语言模型,我们选择ollama. 3.直接点connect,会链接本地下载好的deepseek模型。 参看上篇文章:deepseek本地部署-CSDN博客 4.输入需求生成可用…...

用 HTML、CSS 和 JavaScript 实现抽奖转盘效果

顺序抽奖 前言 这段代码实现了一个简单的抽奖转盘效果。页面上有一个九宫格布局的抽奖区域,周围八个格子分别放置了不同的奖品名称,中间是一个 “开始抽奖” 的按钮。点击按钮后,抽奖区域的格子会快速滚动,颜色不断变化&#xf…...

Skewer v0.2.2安装与使用-生信工具43

01 Skewer 介绍 Skewer(来自于 SourceForge)实现了一种基于位掩码的 k-差异匹配算法,专门用于接头修剪,特别设计用于处理下一代测序(NGS)双端序列。 fastp安装及使用-fastp v0.23.4(bioinfoma…...

C语言:链表排序与插入的实现

好的!以下是一篇关于这段代码的博客文章: 从零开始:链表排序与插入的实现 在数据结构的学习中,链表是一种非常基础且重要的数据结构。今天,我们将通过一个简单的 C 语言程序,来探讨如何实现一个从小到大排序的链表,并在其中插入一个新的节点。这个过程不仅涉及链表的基…...

【Elasticsearch】doc_values 可以用于查询操作

确实,doc values 可以用于查询操作,尽管它们的主要用途是支持排序、聚合和脚本中的字段访问。在某些情况下,Elasticsearch 也会利用 doc values 来执行特定类型的查询。以下是关于 doc values 在查询操作中的使用及其影响的详细解释&#xff…...

深度学习深度解析:从基础到前沿

引言 深度学习作为人工智能的一个重要分支,通过模拟人脑的神经网络结构来进行数据分析和模式识别。它在图像识别、自然语言处理、语音识别等领域取得了显著成果。本文将深入探讨深度学习的基础知识、主要模型架构以及当前的研究热点和发展趋势。 基础概念与数学原理…...

JVM的GC详解

获取GC日志方式大抵有两种 第一种就是设定JVM参数在程序启动时查看,具体的命令参数为: -XX:PrintGCDetails # 打印GC日志 -XX:PrintGCTimeStamps # 打印每一次触发GC时发生的时间第二种则是在服务器上监控:使用jstat查看,如下所示,命令格式为jstat -gc…...

【开源免费】基于Vue和SpringBoot的校园网上店铺系统(附论文)

本文项目编号 T 187 ,文末自助获取源码 \color{red}{T187,文末自助获取源码} T187,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

MMaDA: Multimodal Large Diffusion Language Models

CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络&#xf…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦&#xff0…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...

Kafka主题运维全指南:从基础配置到故障处理

#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...

Sklearn 机器学习 缺失值处理 获取填充失值的统计值

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...

WEB3全栈开发——面试专业技能点P7前端与链上集成

一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染(SSR)与静态网站生成(SSG) 框架,由 Vercel 开发。它简化了构建生产级 React 应用的过程,并内置了很多特性: ✅ 文件系…...

MySQL体系架构解析(三):MySQL目录与启动配置全解析

MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...