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

Selenium入门

Selenium 是一个用于自动化 web 应用程序测试的工具,它支持多种浏览器和编程语言。

下载驱动程序:根据你的浏览器类型和版本,下载相应的 WebDriver。例如,Chrome 浏览器需要 ChromeDriver。

安装 Selenium 库
pip install selenium

导入

from selenium import webdriver

创建浏览器对象

test_webdriver = webdriver.Chrome(service=Service(r"驱动路径"))
test_webdriver.get("https://www.taobao.com")  # 访问网址

selenium元素定位

1. ID定位

通过元素的ID属性进行定位。ID属性在HTML页面中通常是唯一的,因此这种方法定位准确且高效。

driver.find_element(By.ID, "element_id")

2. Name定位

通过元素的name属性进行定位。与ID不同,name属性在页面中可能不是唯一的,但在某些情况下仍然可以作为定位的依据。

driver.find_element(By.NAME, "element_name")

3. TagName定位

通过元素的标签名(TagName)进行定位。由于标签名在页面中往往不是唯一的,因此这种方法定位到的可能是多个元素。

driver.find_elements(By.TAG_NAME, "input")(注意这里使用了find_elements来获取元素列表)

4. ClassName定位

通过元素的class属性进行定位。class属性可能包含多个值,且值之间用空格分隔。需要注意的是,如果class属性值中包含空格或特殊字符,可能需要进行转义处理。

driver.find_element(By.CLASS_NAME, "class_name")

5. LinkText定位

通过超链接的完整文本进行定位。这种方法适用于定位<a>标签的文本内容。

driver.find_element(By.LINK_TEXT, "完整链接文本")

6. PartialLinkText定位

通过超链接的部分文本进行定位。这种方法适用于链接文本较长或只需匹配部分文本的情况。

driver.find_element(By.PARTIAL_LINK_TEXT, "部分链接文本")

7. CSS Selector定位

通过CSS选择器进行定位。CSS选择器是一种强大的定位方式,它支持多种选择策略,如ID选择器、类选择器、属性选择器、伪类选择器等。

driver.find_element(By.CSS_SELECTOR,"#id_value") 或 driver.find_element(By.CSS_SELECTOR, ".class_value")

8. XPath定位

通过XPath表达式进行定位。XPath是一种在XML文档中查找信息的语言,由于HTML可以看作是XML的一种实现,因此XPath也可以用于定位HTML页面中的元素。XPath表达式非常灵活,几乎可以定位到页面上的任何元素。

driver.find_element(By.XPATH, "//input[@id='element_id']")

 Selenium访问元素

在使用Selenium进行Web自动化测试或爬虫时,经常需要访问和操作网页上的元素。Selenium提供了多种方式来访问元素的信息,包括元素的属性、文本内容、标签名等。

1. 获取元素的文本内容

使用text属性可以获取元素的文本内容(即元素内部的文本,不包括标签)。

element_text = element.text

 2. 获取元素的属性值

使用get_attribute(attribute_name)方法可以获取元素的指定属性值。例如,获取链接的href属性或图片的src属性。

href_value = element.get_attribute('href')  
src_value = element.get_attribute('src')

3. 获取元素的标签名

使用tag_name属性可以获取元素的标签名(例如,<div><a>等)。

tag_name = element.tag_name

元素操作

点击:使用click()方法模拟鼠标点击。

输入文本:使用send_keys()方法向输入框等元素发送文本。

清空内容:对于输入框等元素,使用clear()方法清空内容。

页面导航

使用get()方法打开新页面。

使用back()forward()方法模拟浏览器的后退和前进操作。

使用refresh()方法刷新当前页面。

相关文章:

Selenium入门

Selenium 是一个用于自动化 web 应用程序测试的工具&#xff0c;它支持多种浏览器和编程语言。 下载驱动程序&#xff1a;根据你的浏览器类型和版本&#xff0c;下载相应的 WebDriver。例如&#xff0c;Chrome 浏览器需要 ChromeDriver。 安装 Selenium 库 pip install sele…...

USB 3.1 Micro-A 与 Micro-B 插头,Micro-AB 与 Micro-B 插座,及其引脚定义

连接器配对 下表列出 USB 插座可接受的插头&#xff1a; USB 3.1 Micro-B 连接器 USB 3.1 Micro-B 插头和 USB 3.1 Micro-B 插座连接器是为小型手持设备和其他可能使用小尺寸连接器的应用而定义的。其定义使得 USB 3.1 Micro-B 插座既可以接受 USB 3.1 Micro-B 插头&#xff…...

MySQL多版本并发控制MVCC实现原理

MVCC MVCC 是多版本并发控制方法&#xff0c;用来解决读和写之间的冲突&#xff0c;比如脏读、不可重复读问题&#xff0c;MVCC主要针对读操作做限制&#xff0c;保证每次读取到的数据都是本次读取之前的已经提交事务所修改的。 概述 当一个事务要对数据库中的数据进行selec…...

【并查集】[ABC372E] K-th Largest Connected Components 题解

题意 前置阅读&#xff1a;并查集算法介绍 洛谷链接 Atcoder 链接 给定 n ( 1 ≤ n ≤ 2 1 0 5 ) n(1 \leq n \leq 2\times 10^5) n(1≤n≤2105) 个点&#xff0c;初始没有边&#xff0c;您要进行以下操作&#xff1a; 1 a b&#xff0c;表示连接一条 ( a , b ) (a,b) …...

HarmonyOS面试题(持续更新中)

1、用过线程通信吗&#xff0c;线程是怎么进行通信的&#xff1f; emitter 和 eventHub 相同&#xff1a; 都是基于事件总线的 区别是&#xff1a; ① eventHub当前线程内通信 ② emitter是同一进程不同线程或者同一进程和同一线程也可以通信 2、页面和组件的生命周期 …...

QT中QWidget和QObject的区别与联系是什么

在Qt框架中&#xff0c;QWidget和QObject是两个核心类&#xff0c;它们各自扮演着不同的角色&#xff0c;但又紧密相连。以下是关于它们区别与联系的详细解释&#xff1a; 区别 基类和功能定位&#xff1a; QObject是Qt中所有类的基类&#xff0c;包括几乎所有的Qt对象。它提供…...

解决macOS安装redis以后不支持远程链接的问题

参考文档:https://blog.csdn.net/qq_37703224/article/details/142542179?spm1001.2014.3001.5501 安装的时候有个提示, 使用指定配置启动: /opt/homebrew/opt/redis/bin/redis-server /opt/homebrew/etc/redis.conf那么我们可以尝试修改这个配置文件: code /opt/homebrew/…...

2024年研究生数学建模“华为杯”E题——肘部法则、k-means聚类、目标检测(python)、ARIMA、逻辑回归、混淆矩阵(附:目标检测代码)

文章目录 一、情况介绍二、思路情况二、代码展示三、感受 一、情况介绍 前几天也是参加了研究生数学建模竞赛&#xff08;也就是华为杯&#xff09;&#xff0c;也是和本校的两个数学学院的朋友在网上组的队伍。昨天&#xff08;9.25&#xff09;通宵干完论文&#xff08;一条…...

绝了,自从用了它,我每天能多摸鱼2小时!

大家好&#xff0c;我是可乐。 俗话说的好&#xff1a;“摸鱼一时爽&#xff0c;一直摸鱼一直爽”。 作为一个程序员&#xff0c;是否有过调试代码熬到深夜&#xff1f;是否有过找不到解决方案而挠秃头顶&#xff1f; 但现在你即将要解放了&#xff0c;用了这款工具——秘塔…...

C语言指针系列1——初识指针

祛魅&#xff1a;其实指针这块儿并不难&#xff0c;有人说难只是因为基础到进阶没有处理好&#xff0c;大家要好好跟着一步一步学习&#xff0c;今天我们先来认识一下指针 指针定义&#xff1a;指针就是内存地址&#xff0c;指针变量是用来存放内存地址的变量&#xff0c;在同一…...

传神论文中心|第26期人工智能领域论文推荐

在人工智能领域的快速发展中&#xff0c;我们不断看到令人振奋的技术进步和创新。近期&#xff0c;开放传神&#xff08;OpenCSG&#xff09;传神社区发现了一些值得关注的成就。传神社区本周也为对AI和大模型感兴趣的读者们提供了一些值得一读的研究工作的简要概述以及它们各自…...

NLP基础1

NLP基础1 深度学习中的NLP的特征输入 1.稠密编码&#xff08;特征嵌入&#xff09; 稠密编码&#xff08;Dense Encoding&#xff09;&#xff1a;指将离散或者高纬的稀疏数据转化为低纬度的连续、密集向量表示 特征嵌入&#xff08;Feature Embedding&#xff09; ​ 也称…...

001.docker30分钟速通版

docker简介 docker就是一个用于构建&#xff08;build&#xff09;&#xff0c;运行&#xff08;run&#xff09;&#xff0c;传送&#xff08;share&#xff09;应用程序的平台做一个不恰当的类比&#xff0c;就是外卖平台&#xff0c;如果你自己做华莱士不一定好吃&#xff0…...

Kafka 在 Linux 下的集群配置和安装

Kafka 在 Linux 下的集群配置和安装 Apache Kafka 是一个流行的分布式流处理平台&#xff0c;广泛用于实时数据管道和流处理应用。本文将详细讲解如何在 Linux 环境中配置和安装 Kafka 集群&#xff0c;并包括通过 Docker 安装和配置 Kafka 的步骤。每个步骤都将提供详细的解释…...

Python--操作列表

1.for循环 1.1 for循环的基本语法 for variable in iterable: # 执行循环体 # 这里可以是任何有效的Python代码块这里的variable是一个变量名&#xff0c;用于在每次循环迭代时临时存储iterable中的下一个元素。 iterable是一个可迭代对象&#xff0c;比如列表&#xff08;…...

JMeter(需要补充请在留言区发给我,谢谢)

一、学习工具 1、CinfigElement(HTTP Request Defaults、HTTP Header Manager、HTTP Authorization、CSV Data Set Config、User Defined Variables、JDBC Connection Configuration、HTTP Cookie Manager、Random Variable) 二、协议 1、HTTP协议&#xff08;消息体数据&am…...

线程池的执行流程和配置参数总结

一、线程池的执行流程总结 提交线程任务&#xff1b;如果线程池中存在空闲线程&#xff0c;则分配一个空闲线程给任务&#xff0c;执行线程任务&#xff1b;线程池中不存在空闲线程&#xff0c;则线程池会判断当前线程数是否超过核心线程数&#xff08;corePoolSize&#xff09…...

node-red-L3-重启指定端口的 node-red

重启指定端口 目的步骤查找正在运行的Node.js服务的进程ID&#xff08;PID&#xff09;&#xff1a;停止Node.js服务&#xff1a;启动Node.js服务&#xff1a; 目的 重启指定端口的 node-red 步骤 在Linux系统中&#xff0c;如果你想要重启一个正在运行的Node.js服务&#x…...

(done) 使用泰勒展开证明欧拉公式

问问神奇的 GPT&#xff0c;how to prove euler formula? 一个答案如下&#xff1a;...

红队apt--邮件钓鱼

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 免责声明: 本文仅供了解攻击方手法使用&#xff0c;切勿用于非授权情节 初步了解邮件基础 用途方面 这个我们应该比较熟悉&#xff0c;最常用于验证码接收&#xff0c;也有一些厂商会用这个来打广告&#xff0c;…...

用Python复现FAST天眼数学建模:从坐标变换到促动器伸缩量计算(附完整代码)

用Python复现FAST天眼数学建模&#xff1a;从坐标变换到促动器伸缩量计算&#xff08;附完整代码&#xff09; 中国天眼FAST作为全球最大单口径射电望远镜&#xff0c;其主动反射面调节系统堪称现代工程奇迹。当观测不同方位天体时&#xff0c;需要通过促动器精确控制4450块反射…...

告别showSoftInput失效:一文读懂Android 11+的WindowInsetsController输入法控制

Android输入法控制演进&#xff1a;从InputMethodManager到WindowInsetsController的深度解析 在移动应用开发中&#xff0c;输入法交互是最基础却又最容易被忽视的细节之一。许多开发者都曾遇到过这样的场景&#xff1a;精心设计的登录界面&#xff0c;光标在输入框闪烁&#…...

终极CoreCycler教程:简单三步完成CPU稳定性测试与优化

终极CoreCycler教程&#xff1a;简单三步完成CPU稳定性测试与优化 【免费下载链接】corecycler Script to test single core stability, e.g. for PBO & Curve Optimizer on AMD Ryzen or overclocking/undervolting on Intel processors 项目地址: https://gitcode.com/…...

3倍效率提升:Gofile批量下载工具实战指南

3倍效率提升&#xff1a;Gofile批量下载工具实战指南 【免费下载链接】gofile-downloader Download files from https://gofile.io 项目地址: https://gitcode.com/gh_mirrors/go/gofile-downloader 您是否曾为Gofile平台的文件下载效率低下而烦恼&#xff1f;当面对大文…...

All in Token,三个运营商建Token工厂,中国移动跟进Token经营 三大运营商争夺AI阵地

随着Token&#xff08;词元&#xff09;经营战略的密集落地&#xff0c;三大运营商在AI领域的竞争愈发激烈。在日前举行的2026移动云大会上&#xff0c;中国移动正式发布了Token运营生态体系与移动模型服务平台MoMA&#xff0c;宣布接入超300款模型&#xff0c;并通过Token集约…...

fold命令行工具:高效文本数据聚合与分析的瑞士军刀

1. 项目概述&#xff1a;一个为“折叠”而生的高效工具 最近在折腾一些数据处理和文件整理的工作流时&#xff0c;我一直在寻找一个能让我“折叠”起来思考的工具。我说的“折叠”&#xff0c;不是物理上的&#xff0c;而是逻辑上的——把复杂的、多维度的信息&#xff0c;按照…...

TransPrompt:结构化提示词工程,提升LLM应用开发效率

1. 项目概述&#xff1a;当提示词工程遇上结构化工具最近在折腾大语言模型应用开发的朋友&#xff0c;估计都绕不开一个核心痛点&#xff1a;如何高效、稳定地管理那些越来越复杂、越来越长的提示词&#xff08;Prompt&#xff09;。直接写在代码里&#xff1f;改起来麻烦&…...

手把手教你用SystemVerilog Interface搭建一个可复用的DMA寄存器验证环境

基于SystemVerilog Interface构建模块化DMA验证环境的工程实践 在数字IC验证领域&#xff0c;DMA&#xff08;直接内存访问&#xff09;控制器作为关键IP核&#xff0c;其寄存器验证环境的搭建效率直接影响项目进度。传统验证方法中信号连接冗长、时序控制分散的问题&#xff…...

AI编程助手用量追踪器:设计原理与本地化部署实践

1. 项目概述&#xff1a;一个专为编码代理设计的用量追踪器最近在折腾AI编程助手&#xff0c;发现一个挺实际的问题&#xff1a;当你把像Cursor、Claude Code、GitHub Copilot这类“编码代理”引入团队或者个人深度工作流后&#xff0c;怎么知道它们到底“吃”了多少资源&#…...

LoRA模型合并实战:多技能大模型融合指南与vLLM+Copaw工具链解析

1. 项目概述&#xff1a;LoRA模型合并的“瑞士军刀” 在AIGC&#xff08;人工智能生成内容&#xff09;领域&#xff0c;模型微调是让大语言模型&#xff08;LLM&#xff09;或扩散模型适配特定任务、风格或知识库的核心手段。而LoRA&#xff08;Low-Rank Adaptation&#xff0…...