Selenium 基本用法入门指南

Selenium 是一款强大的开源工具,用于自动化 Web 浏览器操作。它可以模拟人类在浏览器上的行为,完成诸如表单填写、页面交互、数据抓取和自动化测试等任务。本文将带你快速上手 Selenium,掌握它的基本用法。

什么是 Selenium?

Selenium 是一个支持多种编程语言的浏览器自动化工具。主要特点包括:

  • 跨浏览器支持:兼容 Chrome、Firefox、Safari、Edge 等主流浏览器。
  • 多语言绑定:支持 Python、Java、C# 等编程语言。
  • 强大的扩展性:可结合 WebDriver 执行复杂的操作。
  • 广泛应用:广泛用于测试自动化、数据抓取、持续集成等领域。

安装 Selenium

1. 安装 Selenium

在 Python 环境中,安装 Selenium 非常简单,只需执行以下命令:

pip install selenium
2. 下载 WebDriver

WebDriver 是 Selenium 和浏览器之间的桥梁,不同的浏览器需要对应的 WebDriver:

  • Chrome: ChromeDriver 下载
  • Firefox: GeckoDriver 下载

确保将下载的 WebDriver 添加到系统环境变量中,或在代码中指定路径。

基本用法

以下将以 Chrome 浏览器为例,展示 Selenium 的基本功能。

1. 打开浏览器并访问网页
from selenium import webdriver# 初始化 WebDriver
driver = webdriver.Chrome()# 打开网页
driver.get("https://www.example.com")# 打印网页标题
print(driver.title)# 关闭浏览器
driver.quit()
2. 定位元素

Selenium 提供多种方法来定位页面元素:

  • By.ID:通过元素的 id
  • By.NAME:通过元素的 name 属性。
  • By.XPATH:通过 XPath 表达式。
  • By.CSS_SELECTOR:通过 CSS 选择器。
from selenium.webdriver.common.by import By# 定位元素
element = driver.find_element(By.ID, "username")
element.send_keys("my_username")  # 输入文本
3. 常见操作
输入文本
element = driver.find_element(By.ID, "password")
element.send_keys("my_password")

点击按钮

button = driver.find_element(By.ID, "login-button")
button.click()

获取元素文本

message = driver.find_element(By.ID, "welcome-message")
print(message.text)

清空文本框

element.clear()
4. 等待元素加载

在实际应用中,某些页面元素可能需要时间加载。可以通过以下方法等待元素:

  • 隐式等待:设置全局等待时间。
  • 显式等待:指定条件等待特定元素。

隐式等待

driver.implicitly_wait(10)  # 等待最多 10 秒

显式等待

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECwait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.ID, "dynamic-element")))
5. 切换窗口和框架
切换到新窗口
driver.switch_to.window(driver.window_handles[1])

切换到 iframe

driver.switch_to.frame("iframe-id")

返回主页面

driver.switch_to.default_content()
6. 执行 JavaScript

有些操作无法直接通过 Selenium 实现,可以通过执行 JavaScript 脚本:

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")  # 滚动到底部
7. 文件上传与下载
文件上传
upload_element = driver.find_element(By.ID, "file-upload")
upload_element.send_keys(r"C:\path\to\file.txt")
文件下载

在浏览器选项中设置默认下载目录:

from selenium.webdriver.chrome.options import Optionsoptions = Options()
options.add_experimental_option("prefs", {"download.default_directory": r"C:\path\to\download",
})
driver = webdriver.Chrome(options=options)

示例:自动化登录

以下示例演示如何通过 Selenium 自动登录一个网站:

from selenium import webdriver
from selenium.webdriver.common.by import By# 初始化 WebDriver
driver = webdriver.Chrome()# 打开登录页面
driver.get("https://example.com/login")# 输入用户名和密码
driver.find_element(By.ID, "username").send_keys("my_username")
driver.find_element(By.ID, "password").send_keys("my_password")# 点击登录按钮
driver.find_element(By.ID, "login-button").click()# 打印登录成功后的标题
print(driver.title)# 关闭浏览器
driver.quit()

常见问题及解决方法

  1. 元素未找到

    • 原因:页面加载过慢。
    • 解决:使用显式等待或检查定位器的准确性。
  2. WebDriver 版本不匹配

    • 原因:浏览器版本与 WebDriver 不匹配。
    • 解决:更新浏览器或下载对应版本的 WebDriver。
  3. 页面交互失败

    • 原因:元素被遮挡或不可见。
    • 解决:尝试滚动页面或使用 JavaScript 执行操作。

总结

Selenium 提供了强大的功能来操作 Web 浏览器,是自动化测试和爬虫开发的利器。本篇文章涵盖了 Selenium 的基础用法,包括浏览器控制、元素定位、页面交互等功能。如果你是初学者,可以从简单的项目入手,比如自动登录、批量数据抓取等。在实际开发中,结合显式等待、多线程和异常处理,可以进一步提升脚本的可靠性和效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/20159.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

物联网研究实训室建设方案

一、引言 随着物联网技术的快速发展,其在各个行业的应用越来越广泛,对物联网专业人才的需求也日益增加。为满足这一需求,建设一个符合现代化教学需求的物联网研究实训室,对于提高学生的实践能力和创新能力具有重要意义。本方案旨…

javaweb学习——Day2

JS对象 1、array 定义: var namenew Array(元素列表); var name[元素列表] 访问: name[索引]值 array的属性和方法 length属性,获取数组长度 foreach():遍历数组元素 x.forEach(element > { console.log(element); }); push():…

实战精选|如何使用 OpenVINO™ 在 ElectronJS 中创建桌面应用程序

点击蓝字 关注我们,让开发变得更有趣 作者 | Mikołaj Roszczyk 华沙理工大学物联网工程师 翻译 | 武卓 英特尔 AI 软件布道师 排版 | 吴紫琴 OpenVINO™ 最近,我完成了一个 demo 演示,展示了 OpenVINO™ 在 Node.js 框架中的强大功能。得益于与 Electr…

PyCharm的类型警告: Expected type ‘SupportsWrite[bytes]‘, got ‘BinaryIO‘ instead

记录时使用的PyCharm版本: PyCharm 2024.3 (Professional Edition) Build #PY-243.21565.199, built on November 13, 2024 问题描述 当在PyCharm里使用pickle保存文件, 比如以下代码这样: with open(meta_save_path, wb) as f:pickle.dump(meta, f)会发现PyCharm对此发出类型…

【Docker】快速部署 Pikachu:一个包含常见 Web 安全漏洞的渗透测试练习靶场

系统介绍 Pikachu是一个带有漏洞的Web应用系统,在这里包含了常见的web安全漏洞。 如果你是一个Web渗透测试学习人员且正发愁没有合适的靶场进行练习,那么Pikachu可能正合你意。 Pikachu上的漏洞类型列表如下: Burt Force(暴力破解漏洞) XSS…

vscode 执行 vue 命令无效/禁止运行

在cmd使用命令可以创建vue项目但是在vscode上面使用命令却不行 一、问题描述 在 cmd 中已确认vue、node、npm命令可以识别运行,但是在 vscode 编辑器中 vue 命令被禁止,详细报错为:vue : 无法加载文件 D:\Software\nodejs\node_global\vue.…

【电路笔记 通信】:数字式时分制指令响应型多路传输数据总线 1553协议 289A-97协议

系统及组成 MIL-STD-1553是一种用于航空、航天和军用系统中的多路传输数据总线标准。最初由美国国防部在1973年制定,该标准旨在为军用飞机、导弹和其他嵌入式系统提供可靠的数据通信,现已被广泛应用于航空航天、卫星、舰船、地面车辆以及其他关键任务系统…

npm/cnpm的使用

npm 1、安装npm 前往nodejs官网下载安装node 验证是否安装成功node node -v node安装npm也会安装 npm -v 2、使用npm 1. 初始化项目 在一个项目文件夹中运行: npm init 根据提示输入项目信息(如项目名称、版本号等)。 如果你希望快速初…

红外相机和RGB相机外参标定 - 无需标定板方案

1. 动机 在之前的文章中红外相机和RGB相机标定:实现两种模态数据融合_红外相机标定-CSDN博客 ,介绍了如何利用标定板实现外参标定;但实测下来发现2个问题: (1)红外标定板尺寸问题,由于标定板小…

web小:在html页面实现多边形按钮

效果如下图所示 主要是使用了clip-path&#xff0c;代码如下 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">&l…

【蓝桥杯C/C++】翻转游戏:多种实现与解法解析

文章目录 &#x1f4af;题目&#x1f4af;问题分析解法一&#xff1a;减法法解法二&#xff1a;位运算解法解法三&#xff1a;逻辑非解法解法四&#xff1a;条件运算符解法解法五&#xff1a;数组映射法不同解法的比较 &#x1f4af;小结 &#x1f4af;题目 在蓝桥镇&#xff0…

V-rep机器人仿真软件学习笔记

常用的机器人仿真软件有哪些&#xff1f;为什么选择V-rep&#xff1f; 目前常用的机器人物理仿真软件有Gazebo、V-rep、Webots等&#xff0c;这三款都是开源软件&#xff0c;自己使用过前两种&#xff0c;Gazebo配合ROS使用功能十分强大&#xff0c;但是要在Linux系统下使用&am…

第7章 硬件测试-7.1 硬件调试

第7章 硬件测试 7.1 硬件调试7.1.1 电路检查7.1.2 电源调试7.1.3 时钟调试7.1.4 主芯片及外围小系统调试7.1.5 存储器件和串口外设调试7.1.6 其他功能模块调试 测试是每项成功产品的必经环节。硬件测试是评估产品质量的重要方法&#xff0c;产品质量是公司的信誉和品牌象征&…

《深入理解 Spring MVC 工作流程》

一、Spring MVC 架构概述 Spring MVC 是一个基于 Java 的轻量级 Web 应用框架&#xff0c;它遵循了经典的 MVC&#xff08;Model-View-Controller&#xff09;设计模式&#xff0c;将请求、响应和业务逻辑分离&#xff0c;从而构建出灵活可维护的 Web 应用程序。 在 Spring MV…

基于Java Springboot宿舍管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

LeetCode螺旋矩阵

快一个月没刷题了&#xff0c;最近工作有些忙&#xff0c;今天闲下来两小时&#xff0c;刷一道 题目描述 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4…

探索CompletableFuture:高效异步编程的利器

目录 一、CompletableFuture基本功能安利 二、CompletableFuture使用介绍 &#xff08;一&#xff09;任务创建使用 1.supplyAsync创建带有返回值的异步任务 2.runAsync创建没有返回值的异步任务 &#xff08;二&#xff09;异步回调使用 1.异步回调&#xff1a;thenApp…

java的强,软,弱,虚引用介绍以及应用

写在前面 本文看下Java的强&#xff0c;软&#xff0c;弱&#xff0c;虚引用相关内容。 1&#xff1a;各种引用介绍 顶层类是java.lang.ref.Reference,注意是一个抽象类&#xff0c;而不是接口&#xff0c;其中比较重要的引用队列ReferenceQueue就在该类中定义&#xff0c;子…

基于STM32的智能垃圾分类投递系统设计

目录 引言系统需求与设计目标硬件设计 3.1 核心控制模块 3.2 传感器模块 3.3 驱动模块 3.4 显示模块 3.5 通信模块软件设计 4.1 数据采集与处理 4.2 垃圾分类逻辑实现 4.3 状态显示与远程监控代码实现 5.1 数据采集与处理 5.2 分类逻辑与控制 5.3 状态显示与通信 5.4 主程序实…

手摸手6-创建前端应用

目录 手摸手6-创建前端应用简介命令 npm create vue 和 npm init vue3的区别 使用 Create-Vue 创建应用1、输入命令 npm create vue 创建应用2、输入命令 npm install 安装相关依赖3、输入命令 npm run dev 运行项目 项目结构 手摸手6-创建前端应用 简介 create-vue 是 vue 应…