使用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选择器、标签名等方式对元素进行查找和地位。成功定位页面元素是对页面进行复杂操作的一个重要前提,下一篇我们将会介绍在页面中进行各种操作。

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

  1. tp3.2 不能提交到action方法_什么是死锁,如何避免死锁(4种方法)

    当两个线程相互等待对方释放资源时,就会发生死锁.Python 解释器没有监测,也不会主动采取措施来处理死锁情况,所以在进行多线程编程时应该采取措施避免出现死锁. 一旦出现死锁,整个程序既不会发生任何异 ...

  2. 懒人修仙传ce修改方法_盘点《西游记》中增长寿命的6种方法,其中长生不老的方法有三种...

    长生不老是每个人梦寐以求的事情,古代那么多皇帝没事就请道士来炼丹,不就是希望自己能长生不老么,结果不仅没长生不老,反而因丹毒而英年早逝.而这种思想,也是深深的影响着诸多小说,比如<西游记> ...

  3. java中日期比较方法_在java中进行日期时间比较的4种方法

    1. Date.compareTo() java.util.Date 提供了在 Java 中比较两个日期的经典方法compareTo(). 如果两个日期相等,则返回值为0. 如果Date在date参数 ...

  4. HTML5期末大作业:鲜花超市网站设计——鲜花超市(4页) HTML+CSS+JavaScript HTML5网页设计成品_学生DW静态网页设计代做_web课程设计网页制作

    HTML5期末大作业:鲜花超市网站设计--鲜花超市(4页) HTML+CSS+JavaScript HTML5网页设计成品_学生DW静态网页设计代做_web课程设计网页制作 作品介绍 1.网页作品简介 ...

  5. div+css静态网页设计——迪斯尼公主滚动特效(7页) HTML5网页设计成品_学生DW静态网页设计代做_web课程设计网页制作

    HTML5期末大作业:电影网站设计--迪斯尼公主滚动特效(7页) HTML5网页设计成品_学生DW静态网页设计代做_web课程设计网页制作 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游 ...

  6. 期末作业成品代码——红色的婚庆(18页) HTML5网页设计成品_学生DW静态网页设计代做_web课程设计网页制作

    HTML5期末大作业:婚庆网站设计--红色的婚庆(18页) HTML5网页设计成品_学生DW静态网页设计代做_web课程设计网页制作 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电 ...

  7. HTML5期末大作业:商城网站设计——仿天猫商城(9页) HTML+CSS大作业_ 网页制作作业_疫情防控网页设计...

    HTML5期末大作业:商城网站设计--仿天猫商城(9页) HTML+CSS大作业: 网页制作作业_疫情防控网页设计- 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电 ...

  8. HTML5期末大作业:婚庆网站设计——红色的婚庆(18页) HTML5网页设计成品_学生DW静态网页设计代做_web课程设计网页制作

    HTML5期末大作业:婚庆网站设计--红色的婚庆(18页) HTML5网页设计成品_学生DW静态网页设计代做_web课程设计网页制作 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电 ...

  9. HTML+CSS网页设计期末课程大作——XXXXX (X页) HTML5网页设计成品_学生DW静态网页设计_web课程设计网页制作

    HTML+CSS网页设计期末课程大作--XXXXX (X页) HTML5网页设计成品_学生DW静态网页设计_web课程设计网页制作 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商 ...

最新文章

  1. HDU2044 一只小蜜蜂…(简单递推)
  2. 统计学习方法第十章作业:HMM模型—概率计算问题、Baum-Welch学习算法、维特比预测算法 代码实现
  3. boost::geometry::num_segments用法的测试程序
  4. import caffe失败 No module named caffe
  5. 谈谈对IOC及DI的理解与思考
  6. java 不规则 拼图_Java中不一致的操作会扩大规则
  7. 在Python中使用OpenCV裁剪图像
  8. java 单选下拉_jQuery对单选框radio,复选框checkbox,下拉列表select的操作
  9. apidoc @apiGroup兼容中文
  10. 数据库Oracle 11g的安装步骤
  11. continue语句只用于循环语句中_流程控制(跳转语句)
  12. 【JAVA笔记——道】Hadoop设计模式--抽象类
  13. ASP.NET Core 的启动和运行机制
  14. Python 列表元素的排序
  15. php生成财务科目编码,会计科目代码(2019会计科目代码对照表)
  16. 十大免费DNS域名解析服务-稳定,可靠,好用的免费DNS服务
  17. 网站地图是什么,怎么制作和查看网站的地图呢?
  18. java常用算法之冒泡排序简单例子
  19. Debian7升级glibc至2.15
  20. linux cut,sed与awk的使用

热门文章

  1. 可禁用计算机服务,win10哪些服务可以禁用 服务哪些可以禁止启动
  2. jpg图片使用pil的resize后_如何使用PIL调整图像大小并保持其纵横比?
  3. ftp 传输速度_ftp上传工具下载,8款优秀的ftp上传工具下载软件
  4. 485转232转换器产品介绍及性能参数介绍
  5. 光模块的参数有哪些呢?
  6. 带网管工业交换机跟不带网管交换机的差别
  7. 【渝粤题库】陕西师范大学292071社会统计学作业(高起专)
  8. 【渝粤题库】陕西师范大学200431综合英语(一)作业(高起专、高起本)
  9. 【渝粤题库】国家开放大学2021春2704植物学基础题目
  10. java utf8转iso8859-1_在Java中将UTF-8转换为ISO-8859-1