Selenium Python教程第4章

news2024/11/22 2:20:46

在这里插入图片描述

4. 查找元素

在一个页面中有很多不同的策略可以定位一个元素。在你的项目中, 你可以选择最合适的方法去查找元素。Selenium提供了下列的方法给你:

find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector

一次查找多个元素 (这些方法会返回一个list列表):

find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector

除了上述的公共方法,下面还有两个私有方法,在你查找也页面元素的时候也许有用。 他们是 find_element 和 find_elements 。

用法示例:

from selenium.webdriver.common.by import By

driver.find_element(By.XPATH, '//button[text()="Some text"]')
driver.find_elements(By.XPATH, '//button')

下面是 By 类的一些可用属性:

ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"

4.1. 通过ID查找元素
当你知道一个元素的 id 时,你可以使用本方法。在该策略下,页面中第一个该 id 元素 会被匹配并返回。如果找不到任何元素,会抛出 NoSuchElementException 异常。

作为示例,页面元素如下所示:

<html>
 <body>
  <form id="loginForm">
   <input name="username" type="text" />
   <input name="password" type="password" />
   <input name="continue" type="submit" value="Login" />
  </form>
 </body>
<html>

可以这样查找表单(form)元素:

login_form = driver.find_element_by_id('loginForm')

4.2. 通过Name查找元素

当你知道一个元素的 name 时,你可以使用本方法。在该策略下,页面中第一个该 name 元素 会被匹配并返回。如果找不到任何元素,会抛出 NoSuchElementException 异常。

作为示例,页面元素如下所示:

<html>
 <body>
  <form id="loginForm">
   <input name="username" type="text" />
   <input name="password" type="password" />
   <input name="continue" type="submit" value="Login" />
   <input name="continue" type="button" value="Clear" />
  </form>
</body>
<html>

name属性为 username & password 的元素可以像下面这样查找:

username = driver.find_element_by_name('username')
password = driver.find_element_by_name('password')

这会得到 “Login” 按钮,因为他在 “Clear” 按钮之前:

continue = driver.find_element_by_name('continue')

4.3. 通过XPath查找元素

XPath是XML文档中查找结点的语法。因为HTML文档也可以被转换成XML(XHTML)文档, Selenium的用户可以利用这种强大的语言在web应用中查找元素。 XPath扩展了(当然也支持)这种通过id或name属性获取元素的简单方式,同时也开辟了各种新的可能性, 例如获取页面上的第三个复选框。

使用XPath的主要原因之一就是当你想获取一个既没有id属性也没有name属性的元素时, 你可以通过XPath使用元素的绝对位置来获取他(这是不推荐的),或相对于有一个id或name属性的元素 (理论上的父元素)的来获取你想要的元素。XPath定位器也可以通过非id和name属性查找元素。

绝对的XPath是所有元素都从根元素的位置(HTML)开始定位,只要应用中有轻微的调整,会就导致你的定位失败。 但是通过就近的包含id或者name属性的元素出发定位你的元素,这样相对关系就很靠谱, 因为这种位置关系很少改变,所以可以使你的测试更加强大。

作为示例,页面元素如下所示:

<html>
 <body>
  <form id="loginForm">
   <input name="username" type="text" />
   <input name="password" type="password" />
   <input name="continue" type="submit" value="Login" />
   <input name="continue" type="button" value="Clear" />
  </form>
</body>
<html>

可以这样查找表单(form)元素:

login_form = driver.find_element_by_xpath("/html/body/form[1]")
login_form = driver.find_element_by_xpath("//form[1]")
login_form = driver.find_element_by_xpath("//form[@id='loginForm']")

绝对定位 (页面结构轻微调整就会被破坏)
HTML页面中的第一个form元素
包含 id 属性并且其值为 loginForm 的form元素
username元素可以如下获取:

username = driver.find_element_by_xpath("//form[input/@name='username']")
username = driver.find_element_by_xpath("//form[@id='loginForm']/input[1]")
username = driver.find_element_by_xpath("//input[@name='username']")

第一个form元素中包含name属性并且其值为 username 的input元素
id为 loginForm 的form元素的第一个input子元素
第一个name属性为 username 的input元素
“Clear” 按钮可以如下获取:

clear_button = driver.find_element_by_xpath("//input[@name='continue'][@type='button']")
clear_button = driver.find_element_by_xpath("//form[@id='loginForm']/input[4]")
Input with attribute named name and the value continue and attribute named type and the value button
Fourth input child element of the form element with attribute named id and value loginForm

还有一些非常有用的插件,可以协助发现元素的XPath:

XPath Checker - suggests XPath and can be used to test XPath results.
Firebug - XPath suggestions are just one of the many powerful features of this very useful add-on.
XPath Helper - for Google Chrome

4.4. 通过链接文本获取超链接

当你知道在一个锚标签中使用的链接文本时使用这个。 在该策略下,页面中第一个匹配链接内容锚标签 会被匹配并返回。如果找不到任何元素,会抛出 NoSuchElementException 异常。

作为示例,页面元素如下所示:

<html>
 <body>
  <p>Are you sure you want to do this?</p>
  <a href="continue.html">Continue</a>
  <a href="cancel.html">Cancel</a>
</body>
<html>

continue.html 超链接可以被这样查找到:

continue_link = driver.find_element_by_link_text('Continue')
continue_link = driver.find_element_by_partial_link_text('Conti')

4.5. 通过标签名查找元素

当你向通过标签名查找元素时使用这个。 在该策略下,页面中第一个匹配该标签名的元素 会被匹配并返回。如果找不到任何元素,会抛出 NoSuchElementException 异常。

作为示例,页面元素如下所示:

<html>
 <body>
  <h1>Welcome</h1>
  <p>Site content goes here.</p>
</body>
<html>

h1 元素可以如下查找:

heading1 = driver.find_element_by_tag_name('h1')

4.6. 通过Class name 定位元素

当你向通过class name查找元素时使用这个。 在该策略下,页面中第一个匹配该class属性的元素 会被匹配并返回。如果找不到任何元素,会抛出 NoSuchElementException 异常。

作为示例,页面元素如下所示:

<html>
 <body>
  <p class="content">Site content goes here.</p>
</body>
<html>

p 元素可以如下查找:

content = driver.find_element_by_class_name('content')

4.7. 通过CSS选择器查找元素

当你向通过CSS选择器查找元素时使用这个。 在该策略下,页面中第一个匹配该CSS 选择器的元素 会被匹配并返回。如果找不到任何元素,会抛出 NoSuchElementException 异常。

作为示例,页面元素如下所示:

<html>
 <body>
  <p class="content">Site content goes here.</p>
</body>
<html>

p 元素可以如下查找:

content = driver.find_element_by_css_selector('p.content')

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

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

相关文章

自己制作智能语音机器人(基于jetson nano)

1 简介 如上图&#xff0c;主要采用jetson上编写python代码实现&#xff0c;支持离线语音唤醒、在线语音识别、大模型智能文档、在线语音合成。 所需硬件如下&#xff1a; jetson nano&#xff1a;linux科大讯飞麦克风硬件&#xff1a;AIUI R818麦克阵列开发套件6麦阵列&#…

华为全栈自主数据库GaussDB正式面向全球服务

一、前言 在6月7日举行的华为全球智慧金融峰会2023上&#xff0c;华为发布新一代分布式数据库GaussDB&#xff0c;并正式向全球客户提供服务。据介绍&#xff0c;GaussDB实现了核心代码100%自主研发&#xff0c;是国内当前唯一做到软硬协同、全栈自主的国产数据库。 可谓是里…

继承类的方法

1 问题 定义一个父类&#xff0c;用子类去继承父类所拥有的方法、定义属性&#xff0c;然后使用测试文件实现子类输出父类的方法信息&#xff0c;属性等。 2 方法 2.1 定义一个名为Person的父类&#xff1a; 2.2 定义一个名为Student的子类&#xff0c;并令其继承父类&#xff…

【PXIE301-211】基于PXIE总线架构的16路并行LVDS采集、1路光纤数据处理平台

PXIE301-211是一款基于PXIE总线架构的16路并行LVDS数据采集、1路光纤收发处理平台&#xff0c;该板卡采用Xilinx的高性能Kintex 7系列FPGA XC7K325T作为实时处理器&#xff0c;实现各个接口之间的互联。板载1组64位的DDR3 SDRAM用作数据缓存。板卡具有1个FMC&#xff08;HPC&am…

20道常考Python面试题大总结,让你轻松拿下大厂offer

关于Python的面试经验 一般来说&#xff0c;面试官会根据求职者在简历中填写的技术及相关细节来出面试题。 一位拿了大厂技术岗Special Offer的网友分享了他总结的面试经验。当时&#xff0c;面试官根据他在简历中所写的技术&#xff0c;面试题出的范围大致如下&#xff1a; …

国际化语言项目

基本概念 1、使用QString对象表示所有用户可见的文本。由于QString内部使用Unicode编码实现&#xff0c;所以它可以用 于表示所有需要向用户呈现的文本。当然&#xff0c;对于仅程序员可见的文本并不需要都变为QString对象&#xff0c;可利 用Qt提供的QCString或原始的“char …

VisualGLM训练缺失latest文件问题解决

清华已经公布了VisualGLM 模型&#xff0c;图像预测也取得了比较好的效果&#xff0c;但是我在调试微调的过程遇到不少问题&#xff0c;这里记录一下缺失latest问题解决&#xff08;ValueError: could not find the metadata file ../latest, please&#xff09; 修正后的代码可…

PyEMD算法解析

算法背景 经验模态分解&#xff08;Empirical Mode Decomposition&#xff0c;缩写EMD&#xff09;是由黄锷&#xff08;N. E. Huang&#xff09;在美国国家宇航局与其他人于1998年创造性地提出的一种新型自适应信号时频处理方法&#xff0c;特别适用于非线性非平稳信号的分析处…

易基因|一种全新的检测DNA羟甲基化的技术:ACE-Seq

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑做组学科研服务的易基因。今天给大家介绍一种全新的检测DNA羟甲基化的技术&#xff1a;APOBEC-coupled epigenetic sequencing&#xff0c;简称【ACE-seq】。 前言 DNA序列中胞嘧啶&#xff08;C&#xff09;5’ 碳…

sed命令对文件内的指定字符串进行替换

目录 一、创建一个txt文件 二、替换每行第一个huawei为apple&#xff0c;第三个“/”后&#xff0c;不加参数就是只替换第一个 三、替换每行所有的xiaomi为iphone&#xff0c;第三个“/”后&#xff0c;加参数g就是替换所有 四、替换每行第二个redmi为potato&#xff0c;第…

ubutun22.04使用deb包安装mysql8.0.33

下载:https://dev.mysql.com/downloads/mysql/ 下载完毕,在ubuntu服务器解包。 安装使用dpkg命令,依次执行如下: sudo dpkg -i mysql-common_8.0.33-1ubuntu22.04_amd64.deb sudo dpkg -i mysql-community-client-plugins_8.0.33-1ubuntu22.04_amd64.deb sudo dpk…

云原生|秒懂云原生容灾备份实践

作者&#xff1a;刘健 后端开发工程师 目录 一、需备份的数据 二、在云航项目中使用 三、备份任务说明 一、需备份的数据 kubernetes在运行中&#xff0c;通常会产生两类数据&#xff1a; kubernetes集群资源对象数据。 容器运行时产生的数据。 针对cloudUp项目而言&am…

淘宝商品信息存入数据库

python 爬虫程序&#xff1a; #京东.pyimport json import pprint import re import requests # name_turnover {} url "https://s.taobao.com/search?data-keys&data-value88&ajaxtrue&_ksTS1686118766568_2290&callbackjsonp2291&ieutf8&in…

用AI写出的高考作文!

今天是6月7日&#xff0c;又到了每一年高考的日子。小灰自己参加高考是在2004年&#xff0c;距离现在已经将近20年&#xff0c;现在回想起来&#xff0c;真的是恍如隔世。 今天高考语文的作文题是什么呢&#xff1f; 全国甲卷的题目是&#xff1a;人技术时间 人们因技术发展得以…

centos7 部署 Redis

从源安装Redis 一、安装Redis1.1 下载源文件1.2 编译源文件1.2.1 解压文件1.2.2 编译Redis 1.2.3 安装Redis1.2.4 启动 Redis 二、Redis设置2.1 缓存设置2.2 redis 环境优化2.3 安全设置 一、安装Redis 1.1 下载源文件 使用下列命令获取最新版的稳定Redis wget https://down…

Live800:智能客服有哪些未来发展趋势?

智能客服&#xff0c;也称智能问答系统&#xff0c;是一种利用机器学习、自然语言处理等技术实现自主询问、自主应答、自主维护的自动化系统。它们可以通过文字形式&#xff0c;为用户提供个性化、一对一的服务&#xff0c;避免了人工客服的人力成本和等待时间。 未来&#xff…

【Protobuf速成指南】enum类型的使用

文章目录 2.1枚举类型一、如何定义枚举类型&#xff1f;二、语法规范三、重定义问题四、enum类型相关函数五、Contact 2.1 改写六、总结 2.1枚举类型 本系列文章将通过对通讯录项目的不断完善&#xff0c;带大家由浅入深的学习Protobuf的使用。这是Contacts的2.1版本&#xff0…

【IMX6ULL驱动开发学习】02.IMX6ULL烧写Linux系统

由于我买的是正点原子的IMX6ULL阿尔法开发板&#xff0c;但是我是看韦东山老师视频学习的驱动 所以这里我烧录的方法是按照韦东山老师的课程来的 这里给出烧写Linux系统用到的工具 链接&#xff1a;https://pan.baidu.com/s/1bD-xxn3K8xQAVkJSaJmTzQ 提取码&#xff1a;af6w …

操作系统1-操作系统的基本特征和主要功能

目录 1、操作系统的目标和作用 &#xff08;1&#xff09;操作系统的目标 &#xff08;2&#xff09;操作系统的作用 2、操作系统的发展过程 &#xff08;1&#xff09;未配置操作系统的计算机系统 &#xff08;2&#xff09;单道批处理系统(Simple Batch Processing Sys…

企企通受邀出席多场高质量数智化活动,推进行业数字化升级转型

当前&#xff0c;数字经济已成为引领全球经济社会变革、推动我国经济高质量发展的重要引擎。Chat GPT的横空出世&#xff0c;宣告虚实无缝结合的跨场景体验时代即将到来。在云计算、大数据、人工智能、物联网等技术助推下&#xff0c;经过大量实践证明&#xff0c;数字化、智能…