Python2 Selenium元素定位的实现(8种)


Posted in Python onFebruary 25, 2019

当我们想让 Selenium 自动地操作浏览器时,就必须告诉 Selenium 如何去定位某个元素或一组元素,每个元素都有着不同的标签名和属性值,Selenium 提供了以下8种定位元素的方式,每种方式对应了2个方法:
find_element_by_( ),是用来定位单个元素的,find_elements_by_( ),是用来定位多个元素的。

  • 通过 id 定位
  • 通过 name 定位
  • 通过 class 定位
  • 通过 tag 定位
  • 通过 link 定位
  • 通过 partial link 定位
  • 通过 xpath 定位
  • 通过 css 选择器定位

下面以百度首页为例进行举例说明:

1.通过 id 定位

find_element_by_id(id)
find_elements_by_id(id)

# _*_ coding:utf-8 _*_
from selenium import webdriver

driver = webdriver.Chrome() 
driver.maximize_window()   
driver.get("https://www.baidu.com/") 
# 定位id为“kw”的元素
input_text = driver.find_element_by_id("kw")
input_text.send_keys("selenium")

driver.quit()

2.通过通过 name 定位

find_element_by_name(name)
find_elements_by_name(name)

# _*_ coding:utf-8 _*_
from selenium import webdriver
 
driver = webdriver.Chrome() 
driver.maximize_window()   
driver.get("https://www.baidu.com/") 
# 定位name为“wd”的元素
input_text = driver.find_element_by_name("wd")
input_text.send_keys("selenium")

driver.quit()

3.通过 class 定位

find_element_by_class_name(name)
find_elements_by_class_name(name)

# _*_ coding:utf-8 _*_
from selenium import webdriver
 
driver = webdriver.Chrome() 
driver.maximize_window()   
driver.get("https://www.baidu.com/") 
# 定位class名称为“s_ipt”的元素
input_text = driver.find_element_by_class_name("s_ipt")
input_text.send_keys("selenium")

driver.quit()

4.通过 tag 定位

find_element_by_tag_name(name)
find_elements_by_tag_name(name)

# _*_ coding:utf-8 _*_
from selenium import webdriver
 
driver = webdriver.Chrome() 
driver.maximize_window()   
driver.get("https://www.baidu.com/") 
# 定位标签为<input>的元素
input_text = driver.find_elements_by_tag_name("input")
print(len(input_text))
driver.quit()

5.通过 link 定位

find_element_by_link_text(link_text)
find_elements_by_link_text(link_text)

# _*_ coding:utf-8 _*_
from selenium import webdriver
 
driver = webdriver.Chrome() 
driver.maximize_window()   
driver.get("https://www.baidu.com/") 
# 定位链接文本完全匹配“我新闻”的元素
news = driver.find_element_by_link_text("新闻")
news.click()

driver.quit()

6.通过 partial link 定位

find_element_by_partial_link_text(link_text)
find_elements_by_partial_link_text(link_text)

# _*_ coding:utf-8 _*_
from selenium import webdriver
 
driver = webdriver.Chrome() 
driver.maximize_window()   
driver.get("https://www.baidu.com/") 
# 定位链接文本部分匹配“新”的元素
news = driver.find_element_by_partial_link_text("新")
news.click()

driver.quit()

7.通过 xpath 定位

find_element_by_xpath(xpath)
find_elements_by_xpath(xpath)

# _*_ coding:utf-8 _*_
from selenium import webdriver
 
driver = webdriver.Chrome() 
driver.maximize_window()   
driver.get("https://www.baidu.com/") 
# xpath定位,相对路径与属性结合定位搜索框
news = driver.find_element_by_xpath("//input[@id='kw']")
news.click()

driver.quit()

8.通过 css 选择器定位

find_element_by_css_selector(css_selector)
find_elements_by_css_selector(css_selector)

# _*_ coding:utf-8 _*_
from selenium import webdriver
 
driver = webdriver.Chrome() 
driver.maximize_window()   
driver.get("https://www.baidu.com/") 
# css选择器,id定位密码输入框
news = driver.find_element_by_css_selector('#kw')
news.click()

driver.quit()

通用的终极定位语法

上面的所有元素定位 find_element_by_xxx和find_elements_by_xxx调用的结果,实际上都是在调用以下两种方法,我们也可以直接调用一下两种方法即可。

find_element(self, by=By.ID, value=None):
find_elements(self, by=By.ID, value=None):

class By(object):
  """
  Set of supported locator strategies.
  """

  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"

例如:

from selenium.webdriver.common.by import By
# 根据id,定位id为“world”的元素
world = driver.find_element(By.ID,"world")
print(world.text)
# xpath定位,相对路径与属性结合 定位密码输入框
password = driver.find_element(By.XPATH,"//input[@name='password']")
print(password.get_attribute("value"))
# css选择器,标签+属性 定位用户名输入框
username = driver.find_element(By.CSS_SELECTOR,"input[name='username']")
print(username.get_attribute("value"))

这里只是简单介绍了8种元素定位方式的使用,比较简单易用的是通过id、name、class定位,我个人比较喜欢的是用xpath定位,当然,最灵活也是最强大的定位方式就是css,它也是比较难掌握的一种方式。关于xpath和css定位方式的详细介绍,可以

参考

selenium 元素定位。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
c++生成dll使用python调用dll的方法
Jan 20 Python
详解Python中的条件判断语句
May 14 Python
python读取和保存视频文件
Apr 16 Python
使用python将大量数据导出到Excel中的小技巧分享
Jun 14 Python
Python爬虫基础之XPath语法与lxml库的用法详解
Sep 13 Python
Python清空文件并替换内容的实例
Oct 22 Python
python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码
Jun 11 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
Jun 11 Python
Matplotlib自定义坐标轴刻度的实现示例
Jun 18 Python
Python 执行矩阵与线性代数运算
Aug 01 Python
Pytest实现setup和teardown的详细使用详解
Apr 17 Python
解决Pytorch dataloader时报错每个tensor维度不一样的问题
May 28 Python
selenium python 实现基本自动化测试的示例代码
Feb 25 #Python
详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
Feb 25 #Python
Python3.5实现的罗马数字转换成整数功能示例
Feb 25 #Python
Python爬虫beautifulsoup4常用的解析方法总结
Feb 25 #Python
python3实现指定目录下文件sha256及文件大小统计
Feb 25 #Python
Python常用爬虫代码总结方便查询
Feb 25 #Python
Python使用paramiko操作linux的方法讲解
Feb 25 #Python
You might like
PHP中HTTP方式下的Gzip压缩传输方法举偶
2007/02/15 PHP
php学习之数据类型之间的转换介绍
2011/06/09 PHP
批量获取memcache值并按key的顺序返回的实现代码
2011/06/14 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
2013/04/15 PHP
PHP中的reflection反射机制测试例子
2014/08/05 PHP
php导入大量数据到mysql性能优化技巧
2014/12/29 PHP
php微信公众平台示例代码分析(二)
2016/12/06 PHP
JS按回车键实现登录的方法
2014/08/25 Javascript
Javascript基础知识(三)BOM,DOM总结
2014/09/29 Javascript
js实现向右横向滑出的二级菜单效果
2015/08/27 Javascript
JavaScript数组去重的两种方法推荐
2016/04/05 Javascript
用瀑布流的方式在网页上插入图片的简单实现方法
2016/09/23 Javascript
jQuery图片加载显示loading效果
2016/11/04 Javascript
基于Bootstrap仿淘宝分页控件实现代码
2016/11/07 Javascript
JavaScript仿微博发布信息案例
2016/11/16 Javascript
原生JS和jQuery操作DOM对比总结
2017/01/19 Javascript
jQuery 防止相同的事件快速重复触发方法
2018/02/08 jQuery
用vue2.0实现点击选中active其他选项互斥的效果
2018/04/12 Javascript
layui下拉列表select实现可输入查找的方法
2019/09/28 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
react实现复选框全选和反选组件效果
2020/08/25 Javascript
解析Python中的eval()、exec()及其相关函数
2017/12/20 Python
python实现输入数字的连续加减方法
2018/06/22 Python
Golang GBK转UTF-8的例子
2019/08/26 Python
python使用celery实现异步任务执行的例子
2019/08/28 Python
python中什么是面向对象
2020/06/11 Python
python中使用asyncio实现异步IO实例分析
2021/02/26 Python
畜牧兽医本科生个人的自我评价
2013/10/11 职场文书
初中生学习生活的自我评价
2013/11/20 职场文书
学校门卫工作职责
2013/12/07 职场文书
大学生学年自我鉴定
2014/02/10 职场文书
《中华少年》教学反思
2014/02/15 职场文书
就业推荐表自我鉴定
2014/03/21 职场文书
政府个人对照检查材料
2014/08/28 职场文书
PyTorch dropout设置训练和测试模式的实现
2021/05/27 Python
MySql重置root密码 --skip-grant-tables
2022/04/11 MySQL