seleniumpython定位网页元素方法_使用Selenium对网页元素进行定位的诸种方法

使用Selenium进行自动化操作,首先要做的就是通过webdriver的get()方法打开一个URL链接。

在打开链接,完成页面加载之后,就可以通过Selenium提供的接口,在页面上进行各种操作了,下面我们来了解一下如何在查找元素。

3.1 查找和定位网页元素

在上一篇的示例中,我们就演示了如何通过find_element_by_id()方法,根据元素的id值来定位页面元素。

除了根据元素的id值来查找元素外,Selenium还提供了很多查找元素的方法:

从上图中可以看到,Selenium提供了近二十个find_element族的方法来供我们在页面中查找元素,其中包括id、name、类名、css选择器、链接文本、标签名、xpath等。

定位单个匹配元素的方法有: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

定位多个匹配元素的方法有: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

我们可以根据不同页面的不同情况来查找定位到我们所需要的页面元素。

3.2 通过id属性进行定位

如果你知道元素的id属性值,那么可以使用find_element_by_id()方法来定位元素,其将返回id属性值与该位置匹配的第一个元素。

百度首页的搜索框结构如下图:

# coding:utf-8

'''

@author:州的先生

@site:zmister.com

@微信公众号:州的先生

'''

from selenium import webdriver

driver = webdriver.Chrome(executable_path=r"D:\chromedriver_win32\chromedriver.exe")

driver.get('http://www.baidu.com')

ele = driver.find_element_by_id('haha')

print(ele)

ele返回的是一个对应的element元素:

如果没有元素匹配传入的id值,将会抛出一个NoSuchElementException异常:

# coding:utf-8

'''

@author:州的先生

@site:zmister.com

@微信公众号:州的先生

'''

from selenium import webdriver

driver = webdriver.Chrome(executable_path=r"D:\chromedriver_win32\chromedriver.exe")

driver.get('http://www.baidu.com')

ele = driver.find_element_by_id('haha')

print(ele)

运行代码,因为没有匹配的id值,所以抛出了异常:

3.3通过name属性进行定位

如果你知道元素的name属性值,那么可以使用find_element_by_name()方法获取第一个匹配name属性值的元素:

# coding:utf-8

'''

@author:州的先生

@site:zmister.com

@微信公众号:州的先生

'''

from selenium import webdriver

driver = webdriver.Chrome(executable_path=r"D:\chromedriver_win32\chromedriver.exe")

driver.get('http://www.baidu.com')

ele = driver.find_element_by_name('wd')

print(ele)

ele返回匹配到的element元素:

C:\Python35\python.exe E:/pythonproject/selenium_env/code/2.py

如果定位一个没有的name属性值,那么也会抛出NoSuchElementException异常:

# coding:utf-8

'''

@author:州的先生

@site:zmister.com

@微信公众号:州的先生

'''

from selenium import webdriver

driver = webdriver.Chrome(executable_path=r"D:\chromedriver_win32\chromedriver.exe")

driver.get('http://www.baidu.com')

ele = driver.find_element_by_name('zmister')

print(ele)

3.4 通过Xpath进行元素定位

XPath是用于在XML文档中查找节点的一种语言。由于HTML可以是XML(XHTML)的实现,因此我们可以利用这种强大的语言在网页中进行元素的定位。XPath扩展并支持了通过id或name属性定位的简单方法,并提供了各种新的操作,例如在页面上查找第三个复选框等。

使用Xpath的一个原因是,有时候页面上我们需要定位的元素并没有id属性和name属性,这时候就可以用Xpath以绝对路径的方式进行元素定位,或者是通过id或name属性值定位到父元素再取到子元素。

对于Xpath的知识,在此不做介绍,有需要的同学看看专门介绍Xpath的网站或教程,比如:

在此我们简单介绍一下如何快速地通过浏览器获取到页面元素的Xpath路径。在浏览器中打开网页调试控制台,在需要定位的元素上,单击鼠标右键,会出现一个选项栏,在“copy”中选择“Copy XPath”即可:

# coding:utf-8

'''

@author:州的先生

@site:zmister.com

@微信公众号:州的先生

'''

from selenium import webdriver

driver = webdriver.Chrome(executable_path=r"D:\chromedriver_win32\chromedriver.exe")

driver.get('http://www.baidu.com')

ele = driver.find_element_by_xpath('//*[@id="kw"]')

print(ele)

这样,我们通过XPath路径也能够定位到百度首页搜索框:

3.5 通过标签名来定位元素

当我们想通过元素的标签名称来定位一个元素时,可以使用find_element_by_tag_name()这个方法,其将返回具有给定标签名称的第一个元素:

# coding:utf-8

'''

@author:州的先生

@site:zmister.com

@微信公众号:州的先生

'''

from selenium import webdriver

driver = webdriver.Chrome(executable_path=r"D:\chromedriver_win32\chromedriver.exe")

driver.get('http://www.baidu.com')

ele = driver.find_element_by_tag_name('input')

print(ele)

在这里,我们直接通过input的元素标签名来进行定位,因为百度首页上第一个input为搜索框,所以我们也能够定位到:

如果匹配不到,同样会抛出NoSuchElementException异常。

3.6 通过class类名来定位元素

如果我们想通过元素的class属性值来定位,那么可以使用find_element_by_class_name()方法。其将返回匹配的第一个元素,如果没有匹配的元素,同样会抛出NoSuchElementException异常:

# coding:utf-8

'''

@author:州的先生

@site:zmister.com

@微信公众号:州的先生

'''

from selenium import webdriver

driver = webdriver.Chrome(executable_path=r"D:\chromedriver_win32\chromedriver.exe")

driver.get('http://www.baidu.com')

ele = driver.find_element_by_class_name('s_btn')

print(ele)

在这里,我们通过class类名定位了百度首页的搜索按钮。

3.7 通过CSS选择器进行定位元素

CSS选择器是一种通过元素的CSS属性值来定位元素的语法,我们可以使用find_element_by_css_selector()方法通过css选择器定位元素:

# coding:utf-8

'''

@author:州的先生

@site:zmister.com

@微信公众号:州的先生

'''

from selenium import webdriver

driver = webdriver.Chrome(executable_path=r"D:\chromedriver_win32\chromedriver.exe")

driver.get('http://www.baidu.com')

ele = driver.find_element_by_css_selector('input.s_btn')

print(ele)

CSS选择器的绝对语法我们可以通过浏览器调试控制台中的“Copy”获取到:

3.8 通过链接标签文字定位元素

除了上述的元素定位方式,我们还可以通过a标签上的文字进行元素定位,使用的是find_element_by_link_text()方法。

在百度首页的最顶部,是有一排链接的,如下图:

如果我们需要定位到“地图”那个链接元素上,就可以这样操作:

# coding:utf-8

'''

@author:州的先生

@site:zmister.com

@微信公众号:州的先生

'''

from selenium import webdriver

driver = webdriver.Chrome(executable_path=r"D:\chromedriver_win32\chromedriver.exe")

driver.get('http://www.baidu.com')

ele = driver.find_element_by_link_text('地图')

print(ele)

这样就成功的地位到了元素:

同样的,如果匹配不到,也会抛出NoSuchElementException异常:

# coding:utf-8

'''

@author:州的先生

@site:zmister.com

@微信公众号:州的先生

'''

from selenium import webdriver

driver = webdriver.Chrome(executable_path=r"D:\chromedriver_win32\chromedriver.exe")

driver.get('http://www.baidu.com')

ele = driver.find_element_by_link_text('州的先生')

print(ele)

匹配不到链接文字为“州的先生”的元素:

3.9总结

在本篇,我们介绍了在使用Selenium打开一个页面之后,如何通过id属性、name属性、class属性、Xpath路径、CSS选择器、标签名等方式对元素进行查找和地位。成功定位页面元素是对页面进行复杂操作的一个重要前提,下一篇我们将会介绍在页面中进行各种操作。

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

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

相关文章

有赞全链路压测方案

转载于:https://www.cnblogs.com/wuzhiyi/p/10944934.html

python 消息队列 get是从队首还是队尾取东西_python分布式爬虫中消息队列知识点详解...

当排队等待人数过多的时候,我们需要设置一个等待区防止秩序混乱,同时再有新来的想要排队也可以呆在这个地方。那么在python分布式爬虫中,消息队列就相当于这样的一个区域,爬虫要进入这个区域找寻自己想要的资源,当然这…

mime类型是什么类型_使用多种MIME类型测试REST

mime类型是什么类型1.概述 本文将重点介绍测试具有多种媒体类型/表示形式的RESTful服务。 这是有关使用Spring和基于Java的配置的Spring Security设置安全的RESTful Web服务的系列文章的第十篇。 REST with Spring系列: 第1部分 – 使用Spring 3.1和基于Java的配置…

Go-Mutex互斥量

先来看一段go1.12.5中Mutex的源码: // Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file.// Package sync provides basic synchronization primiti…

spss方差分析_【案例】SPSS统计分析:多因素方差分析

- 点击上方“中国统计网”订阅我吧!-多因素方差分析,用于研究一个因变量是否受到多个自变量(也称为因素)的影响,它检验多个因素取值水平的不同组合之间,因变量的均值之间是否存在显著的差异。多因素方差分…

你好世界

想打个Hello World,但是又没有继续下去。 今天买茶百道的时候,做茶的女孩子很开朗很友善,在她递给我装好的山竹荔枝的时候我闻到水果的苦味,于是捧住杯子埋头下去闻了一下,她笑着说,“每次我做这个的时候都…

sqlserver免安装_SQL数据分析,如何免安装在线运行?

大家好,在之前写了一篇关于SQL软件安装,读者普遍反映,这个软件有点不好安装,但是,从事数据分析行业,熟练使用SQL软件是必须的,于是乎......本文推送一篇免安装的,可以在线运行的SQL软…

python自动导出数据脚本_利用python生成一个导出数据库的bat脚本文件的方法

# 环境: python3.xdef getExportDbSql(db, index):# 获取导出一个数据库实例的sql语句sql mysqldump -u%s -p%s -h%s -P%d --default-character-setutf8 --databases mu_ins_s%s > %s.s%d.mu_ins_%d.sql %(db[user], db[pwd], db[host], db[port], index, db[server], inde…

java内存模型和内存结构_Java内存模型和优化

java内存模型和内存结构总览 许多多线程代码开发人员都熟悉这样的想法,即不同的线程可以对持有的值有不同的看法,这不是唯一的原因,即如果线程不安全,它可能不会看到更改。 JIT本身可以发挥作用。 为什么不同的线程看到不同的值&…

ANTLR巨型教程

解析器是功能强大的工具,使用ANTLR,您可以编写可用于多种不同语言的各种解析器。 在本完整的教程中,我们将要: 解释基础 :解析器是什么,解析器可以用于什么 了解如何设置要从Javascript,Pyth…

Web进程被kill掉后线程还在运行怎么办?

目录 背景描述原因分析处理方案参考背景描述 系统有一个配置表,系统在启动后会启动一个线程,每隔5分钟将配置表里所有的数据更新到内存中。 系统是通过jenkins构建(直接kill掉Web进程,然后传入新的包再启动)的&#xf…

北京学python 价格怎么样_北京学习Python需要多少钱

Python本身语言具有一定的优势所在,简单易学,就业方向多,也就意外着从事Python的工程师相对于其他编程语言的工程师来说,就业机会更多,薪资待遇更高。1、web网站工程师:我们都知道web是我们一直不能忽视的存…

go Windows Service

相关库 https://godoc.org/golang.org/x/sys/windows/svchttps://github.com/kardianos/servicehttps://github.com/judwhite/go-svchttps://github.com/btcsuite/winsvc参考 云监控Go语言版本插件介绍 - 这个不知道用的什么库实现的Cannot start golang application exe as a …

华为南太无线解决方案部梁旭阳_华为无线充电新专利:激光无线充电,替代传统半接触式...

传统的无线充电技术是用感应线圈通过短距离,实际上是有接触式充电,但是相对于真正的无线充电,还是不够便利,最近,华为新无线充电技术曝光:激光无线充电。虽然无线充电已在近年得到了较大的普及,…

jquery的懒加载记录一下踩得坑

官网下载地址&#xff1a;http://plugins.jquery.com/lazyload/ 要引入两个文件&#xff0c;注意这些事html中包含着 <script src"https://code.jquery.com/jquery-1.11.3.min.js"></script><script src"js/jquery.lazyload.js"></sc…

rsync 同步优化_可以优化同步吗?

rsync 同步优化总览 有一个常见的误解&#xff0c;因为JIT很智能&#xff0c;并且可以消除对象的同步&#xff0c;而该对象仅存在于不影响性能的方法中。 比较StringBuffer和StringBuilder的测试 这两个类基本上做同样的事情&#xff0c;除了一个是同步的&#xff08;StringBu…

sudoers 用户权限配置_使用sudo让普通用户获取root用户的权限

sudo 是 Linux 系统管理指令&#xff0c;是允许系统管理员让普通用户执行一些或者全部的 root 命令的一个工具&#xff0c;如 halt&#xff0c;reboot&#xff0c;su 等等。这样不仅减少了 root 用户的登录 和管理时间&#xff0c;同样也提高了安全性。sudo不是对 shell 的一个…

Spring Boot –使用执行器端点在运行时配置日志级别

从Spring Boot 1.5开始&#xff0c;新的loggers器执行器端点允许在运行时查看和更改应用程序记录级别。 将spring-boot-actuator添加到您的项目 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator&…

Python学习教程:Python增强赋值及共享引用注意事项

Python学习教程&#xff1a;Python增强赋值及共享引用注意事项 概述 Python中的增强赋值是从C语言中借鉴出来的&#xff0c;所以这些格式的用法大多和C一致&#xff0c;本身就是对表达式的简写&#xff0c;即二元表达式和赋值语句的结合&#xff0c;比如a b 和a a b 就是一致…

python math.sinh_Python numpy.sinh()用法及代码示例

numpy.sinh(x [&#xff0c;out]) ufuncsin)&#xff1a;此数学函数可帮助用户计算所有x(作为数组元素)的双曲正弦值。等效于1/2 *(np.exp(x)-np.exp(-x))或-1j * np.sin(1j * x)。参数&#xff1a;array :[数组]元素以弧度为单位。2pi弧度 36o度返回&#xff1a;对于所有x即数…