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)和判别器࿰…...
Visual Studio Code应用本地部署的deepseek
1.打开Visual Studio Code,在插件中搜索continue,安装插件。 2.添加新的大语言模型,我们选择ollama. 3.直接点connect,会链接本地下载好的deepseek模型。 参看上篇文章:deepseek本地部署-CSDN博客 4.输入需求生成可用…...
用 HTML、CSS 和 JavaScript 实现抽奖转盘效果
顺序抽奖 前言 这段代码实现了一个简单的抽奖转盘效果。页面上有一个九宫格布局的抽奖区域,周围八个格子分别放置了不同的奖品名称,中间是一个 “开始抽奖” 的按钮。点击按钮后,抽奖区域的格子会快速滚动,颜色不断变化…...
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 在查询操作中的使用及其影响的详细解释ÿ…...
深度学习深度解析:从基础到前沿
引言 深度学习作为人工智能的一个重要分支,通过模拟人脑的神经网络结构来进行数据分析和模式识别。它在图像识别、自然语言处理、语音识别等领域取得了显著成果。本文将深入探讨深度学习的基础知识、主要模型架构以及当前的研究热点和发展趋势。 基础概念与数学原理…...
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 国内…...
用Python+Pandas搞定校园单车数据清洗:从‘200+’到精准分布表的保姆级教程
用PythonPandas搞定校园单车数据清洗:从‘200’到精准分布表的保姆级教程 校园单车数据清洗是数据分析实战中的经典场景。想象一下这样的情境:你拿到一份包含15个停车点、7个时间段的校园单车统计表,却发现数据里混杂着"200"这样的…...
短视频 SEO 如何提高网站的搜索排名
为什么短视频 SEO 是提高网站搜索排名的关键 在当今数字化时代,短视频平台已经成为人们获取信息和娱乐的主要渠道。短视频的流行不仅改变了人们的观看习惯,还深刻影响了网络营销的方式。如何利用短视频 SEO(搜索引擎优化)来提高网…...
资源提取高效解析与跨设备管理:猫抓浏览器扩展的技术实践
资源提取高效解析与跨设备管理:猫抓浏览器扩展的技术实践 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字化内容爆炸的今天&…...
避坑指南:深度相机与RGB相机标定中的5个常见错误
避坑指南:深度相机与RGB相机标定中的5个常见错误 在三维重建和增强现实开发中,深度相机与RGB相机的联合标定是基础却极易出错的关键环节。许多开发者投入大量时间调试标定结果,却因忽视了一些看似简单的细节而功亏一篑。本文将揭示五个最常被…...
从快捷菜单到设置项:Android 11电池功能全移除实战指南
Android 11企业级设备电池功能深度定制指南 在工业平板、自助终端等专用设备场景中,系统界面的精简与定制往往比通用功能更重要。想象一下,一台用于仓库管理的工业平板,电池状态显示不仅毫无意义,还可能引发不必要的用户困惑——…...
Java毕业设计实战:基于SpringBoot的社区健康档案管理系统开发指南
1. 为什么选择SpringBoot开发健康档案管理系统 作为一个带过上百个Java毕业设计的导师,我强烈推荐用SpringBoot来开发社区健康档案管理系统。去年我带的学生小张就用这个框架完成了他的毕设,不仅顺利通过答辩,还被当地社区卫生服务中心看中直…...
K8s定时任务实战:如何用CronJob每分钟输出Hello World(附表达式详解)
K8s定时任务实战:从Hello World到生产级CronJob配置 在云原生技术栈中,定时任务作为自动化运维的核心组件,其重要性不言而喻。Kubernetes提供的CronJob资源,让开发者能够以声明式的方式管理周期性任务,而无需依赖传统…...
Kandinsky-5.0-I2V-Lite-5s开源模型部署:无需代码基础的图形化AI视频工具
Kandinsky-5.0-I2V-Lite-5s开源模型部署:无需代码基础的图形化AI视频工具 1. 产品介绍 Kandinsky-5.0-I2V-Lite-5s是一款革命性的图生视频AI工具,它将复杂的视频制作过程简化为几个简单的点击操作。不同于传统需要专业剪辑软件和技能的视频制作方式&am…...
适合自动化测试练习的免费 API 清单
免费接口-聚合网站 https://www.juhe.cn/ 适合自动化测试练习的免费 API 清单,按场景分类,覆盖 REST/GraphQL、状态码验证、自定义 Mock 与真实数据,可直接用于接口测试(含 Python+pytest)练习。 一、核心免费 API 清单(按场景) 表格 名称 类型 核心用途 特点 访问方式…...
RTL8188EU USB WiFi模块AP模式配置避坑指南
RTL8188EU USB WiFi模块AP模式配置实战:从编译到避坑全解析 在物联网和嵌入式开发领域,RTL8188EU USB WiFi模块因其低成本和高兼容性被广泛使用。但当你尝试将其配置为AP模式时,官方hostapd的兼容性问题往往会让开发者陷入数天的调试泥潭。我…...
