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

Selenium 全面指南

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


1. Selenium 的基本概念

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

2. Selenium 的主要模块及 API

2.1 WebDriver

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

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

2.1.2 浏览器导航

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

2.2 定位元素

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

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

2.4 等待

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

2.4.1 隐式等待

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

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

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

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

2.6 Cookie 和 JavaScript

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

2.7 处理弹窗

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

3. 进阶技巧

3.1 动态 XPath

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

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

 3.2 验证页面加载完成

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


4. 常见问题和解决方案

  1. 元素未找到

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

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

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

5. 总结

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

相关文章:

Selenium 全面指南

Selenium 是一个强大的 Web 自动化工具,支持多种浏览器和语言绑定。 1. Selenium 的基本概念 WebDriver:Selenium 提供的核心接口,用于控制浏览器操作。显式等待:等待特定条件满足后再执行操作。隐式等待:全局设置一个…...

#error: WinSock.h has already been included解决方案

原因&#xff1a; 在工程中使用了 Boot 库之后&#xff0c;使用了socket、tcp 相关的头文件&#xff0c;在其他地方还是包括了头文件<windows.h>&#xff0c;该头文件内包含了<winsock.h>。导致遇到报错问题&#xff1a;WinSock.h has already been included 解决…...

2.Couchbase 的增量查询优化

在 Couchbase 中实现增量查询的优化是关键&#xff0c;尤其当数据量庞大时。通过合适的策略&#xff0c;可以显著提高增量查询的效率&#xff0c;确保系统在处理实时数据时的响应速度和性能。下面是一些针对 Couchbase 增量查询的优化策略。 1. 使用索引优化查询 为了提升增量…...

汽车IVI中控开发入门及进阶(46):FFmpeg

概述: FFmpeg 是领先的多媒体框架,能够解码、编码、 转码、复用、解复用、流、过滤和播放 几乎所有人类和机器创建的东西。它支持最模糊的古老格式,直到最前沿。无论它们是由某个标准委员会、社区还是公司设计的。它还具有高度的可移植性:FFmpeg 在各种构建环境、机器架构…...

Spring Boot 中的 @Scheduled 定时任务以及开关控制

Scheduled注解是Spring框架&#xff08;包括Spring Boot&#xff09;中用于实现定时任务的一种方式。以下是对Scheduled注解的详细解析&#xff1a; 一、基本概念 Scheduled注解允许开发者在Spring容器中定义定时任务。通过简单地在一个方法上添加Scheduled注解&#xff0c;S…...

服务器证书原理

CA&#xff08;Certificate Authority&#xff09;证书是由 证书颁发机构&#xff08;CA&#xff09;本身签名的。具体来说&#xff0c;这取决于 CA 的类型和其在信任链中的位置&#xff1a; 1. 自签名证书 根 CA 证书 是信任链的起点&#xff0c;由 CA 自己签名。它们是信任链…...

重温设计模式--代理、中介者、适配器模式的异同

文章目录 1、相同点2、不同点 1、相同点 目的都是为了更好地处理对象之间的关系&#xff1a;这三种模式都是在软件设计中用于处理对象之间的关联和交互&#xff0c;以达到优化系统结构、增强可维护性等目的。它们都在一定程度上隐藏了对象之间的某些细节或者复杂性&#xff0c…...

2024第十六届蓝桥杯模拟赛(第二期)-Python

# 2024第十六届蓝桥杯模拟赛&#xff08;第二期&#xff09;-Python题解 # 自己改注释# -----------------------1------------------------ # def prime(x): # if x < 2: # return 0 # for i in range(2, int(x ** 0.5) 1): # if x % i 0: # …...

分布式系统中的防抖策略一致性与性能优化

目录 引言分布式系统的挑战防抖策略简介确保多实例间一致性的方法 幂等操作TTL缓存 分布式一致性事件总线或消息队列异步任务调度器客户端或API网关层面的防抖一致性哈希与分区限流和熔断机制 避免锁竞争导致的性能瓶颈Java示例代码结论 引言 在现代软件架构中&#xff0c;…...

项目代码第6讲:UpdownController.cs;理解 工艺/工序 流程、机台信息;前端的“历史 警报/工艺 记录”

一、UpdownController.cs 1、前端传入 当用户在下图的“记录查询”中的 两个界面选项 中,点击“导出”功能时,向后端发起请求,请求服务器下载文件的权限 【权限是在Program.cs中检测的,这个控制器里只需要进行“谁在哪个接口下载了文件”的日志记录】 【导出:是用户把…...

【计算机视觉基础CV-图像分类】03-深度学习图像分类实战:鲜花数据集加载与预处理详解

本文将深入介绍鲜花分类数据集的加载与处理方式&#xff0c;同时详细解释代码的每一步骤并给出更丰富的实践建议和拓展思路。以实用为导向&#xff0c;为读者提供从数据组织、预处理、加载到可视化展示的完整过程&#xff0c;并为后续模型训练打下基础。 前言 在计算机视觉的深…...

大模型应用技术系列(一):大模型应用整体技术栈浅析

RAG相关的技术学习暂时告一段落了,接下来尝试探索新的学习方向。这就引入一个问题:接下来该做什么?为了能进一步推进,我需要有一个整体的视角,从更上层来看整个技术栈,从而确定接下来感兴趣的方向。本文主要探索从更上层的视角来看构建大模型的技术栈,从而进一步确定研究…...

绿色环保木塑复合材料自动化生产线设计书

《绿色环保木塑复合材料自动化生产线设计书》 一、项目概述 随着全球对环境保护和可持续发展的日益重视,绿色环保材料的研发与生产成为了热门领域。木塑复合材料作为一种新型的绿色环保材料,它将木材纤维与塑料通过特定工艺复合而成,兼具木材与塑料的双重特性,具有防水、…...

Sourcegraph 概述

Sourcegraph 报告 Sourcegraph 是一款强大的代码搜索和智能导航工具&#xff0c;专为大型代码库、分布式系统和跨多个仓库的开发环境设计。它能显著提高开发者对复杂系统的理解和维护效率&#xff0c;帮助团队在庞大的代码库中快速找到关键信息。本文将详细讲解 Sourcegraph 的…...

c 保存 csv格式的文件

在C语言中保存数据为CSV&#xff08;逗号分隔值&#xff09;格式的文件&#xff0c;你可以使用标准I/O库函数&#xff0c;如fprintf&#xff0c;来将数据写入文件&#xff0c;并确保每个字段之间用逗号分隔。以下是一个简单的示例&#xff0c;说明如何在C语言中创建一个CSV文件…...

C语言扫雷游戏教学(有图形界面)(提供源码+实验报告)(计时+排行榜+难度选择+登录注册+背景音乐)(涉及easyX库)

前言&#xff1a; 本篇文章篇幅较长&#xff0c;请根据自己的需求在目录上跳转对应内容哦&#xff01;源码及实验报告的获取在文章的后面哦&#xff01;本人代码水平不佳&#xff0c;希望本文章和项目能带给大家帮助&#xff01; 目录 前言&#xff1a; 一.成果预览&#x…...

第五节:GLM-4v-9b模型model加载源码解读(模型相关参数方法解读)

文章目录 前言一、GLM-4v-9b模型model加载源码解读1、GLM-4v-9b模型model加载主函数源码2、GLM-4v-9b模型model加载源码源码解读3、GLM-4v-9b自定义模型类源码解读 二、基于GLM-4v-9b模型获取模型输入参数等内容源码解读(from_pretrained-->huggingface)1、from_pretrained函…...

面试经验分享 | 北京渗透测试岗位

更多大厂面试经验的视频经验分享看主页 目录&#xff1a; 所面试的公司&#xff1a;安全大厂 所在城市&#xff1a;北京 面试职位&#xff1a;渗透测试工程师 面试方式&#xff1a;腾讯会议线上面试线下面试 面试过程&#xff1a; 面试官的问题&#xff1a; 1、说一下XSS有哪…...

unity Toggle制作滑动开关

先上效果图 重点是这个Graphic要清空,不然显示不能直接切换,会消失 using DG.Tweening; using UnityEngine; using UnityEngine.UI;public class SwitchToggle : MonoBehaviour {public RectTransform handleRect;public float duration 0.5f;private Vector2 handlePos;To…...

全面解析 Kubernetes 流量负载均衡:iptables 与 IPVS 模式

目录 Kubernetes 中 Service 的流量负载均衡模式 1. iptables 模式 工作原理 数据路径 优点 缺点 适用场景 2. IPVS 模式 工作原理 数据路径 优点 缺点 适用场景 两种模式的对比 如何切换模式 启用 IPVS 模式 验证模式 总结 Kubernetes 中 Service 的流量负载…...

【unity】【游戏开发】Unity项目一运行就蓝屏报Watch Dog Timeout

【背景】 由于是蓝屏所以没法截屏&#xff0c;总之今天遇到了一开Unity&#xff0c;过一阵就蓝屏的情况&#xff0c;报Watch Dog Timeout。 【分析】 通过任务管理器查看&#xff0c;发现Unity占用率100%&#xff0c;再观察Unity内部&#xff0c;每次右下角出现一个Global I…...

【macos java反编译工具Java Decompiler】

mac上能用的反编译工具 https://java-decompiler.github.io/...

宠物用品电子商务系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…...

脑肿瘤检测数据集,对9900张原始图片进行YOLO,COCO,VOC格式的标注

脑肿瘤检测数据集&#xff0c;对9900张原始图片进行YOLO&#xff0c;COCO&#xff0c;VOC格式的标注 数据集分割 训练组 70&#xff05; 6930图片 有效集 20&#xff05; 1980图片 测试集 10&#xff05; 990图片 预处理 静态裁剪&#xff1a; 24-82&…...

Adversarial Machine Learning(对抗机器学习)

之前把机器学习&#xff08;Machine Learning&#xff09;的安全问题简单记录了一下&#xff0c;这里有深入研究了一些具体的概念&#xff0c;这里记录一下方便以后查阅。 Adversarial Machine Learning&#xff08;对抗机器学习&#xff09; Adversarial Examples 相关内容Eva…...

每日十题八股-2024年12月23日

1.MySQL如何避免重复插入数据&#xff1f; 2.CHAR 和 VARCHAR有什么区别&#xff1f; 3.Text数据类型可以无限大吗&#xff1f; 4.说一下外键约束 5.MySQL的关键字in和exist 6.mysql中的一些基本函数&#xff0c;你知道哪些&#xff1f; 7.SQL查询语句的执行顺序是怎么样的&…...

Android Studio新建项目在源码中编译

新建空白项目 用AS新建默认空项目&#xff0c;代码目录如下&#xff1a; MyApplication$ tree -L 4 . ├── Android.bp // bp编译脚本 ├── Android.mk.bak // mk编译脚本 ├── app // 下面目录结构是AS新建工程目录 │ ├── build.gradle │ ├── pro…...

ubuntu使用ffmpeg+ZLMediaKit搭建rtsp推流环境

最方便的方式&#xff0c;ubuntu上安装vlc播放器&#xff0c;通过vlc来推流&#xff0c;在网上有很多教程。这里采用ffmpegZLMediaKit 必备条件&#xff1a; 1、安装ffmpeg 2、安装ZLMediaKit 一、安装ffmpeg sudo apt update sudo apt install ffmpeg 二、安装ZLMediaKit…...

vue中的css深度选择器v-deep 配合!important

当 <style> 标签有 scoped 属性时&#xff0c;它的 CSS 只作用于当前组件中的元素&#xff0c;父组件的样式将不会渗透到子组件。 如果你希望 scoped 样式中的一个选择器能够作用得“更深”&#xff0c;例如影响子组件&#xff0c;你可以使用深度选择器。 ::v-deep { } 举…...

Python读写JSON文件

import jsondef writeJSONFile(self):with open(g_updateFilePath, "w" encodingutf-8) as fiel:json.dump(dictData, fiel, indent4, ensure_asciiFalse)fiel.close()def readJsonToDict(file):with open(file, r, encodingutf-8) as f: # 确保文件以 UTF-8 编码打…...