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 相关文章推荐
Python算法应用实战之栈详解
Feb 04 Python
通过Py2exe将自己的python程序打包成.exe/.app的方法
May 26 Python
python实现批量图片格式转换
Jun 16 Python
浅谈关于Python3中venv虚拟环境
Aug 01 Python
利用python实现在微信群刷屏的方法
Feb 21 Python
Python笔记之观察者模式
Nov 20 Python
pytorch实现线性拟合方式
Jan 15 Python
python统计文章中单词出现次数实例
Feb 27 Python
Python中的全局变量如何理解
Jun 04 Python
Python QTimer实现多线程及QSS应用过程解析
Jul 11 Python
Python文件名匹配与文件复制的实现
Dec 11 Python
OpenCV-Python 实现两张图片自动拼接成全景图
Jun 11 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
mysql_num_rows VS COUNT 效率问题分析
2011/04/23 PHP
基于laravel Request的所有方法详解
2019/09/29 PHP
PHP实现简单的协程任务调度demo示例
2020/02/01 PHP
window.open的页面如何刷新(父页面)上层页面
2012/12/28 Javascript
JS 数字转换研究总结
2013/12/26 Javascript
让alert不出现弹窗的两种方法
2014/05/18 Javascript
jQuery on方法传递参数示例
2014/12/09 Javascript
JavaSacript中charCodeAt()方法的使用详解
2015/06/05 Javascript
JavaScript中getUTCSeconds()方法的使用详解
2015/06/11 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
2017/03/06 Javascript
微信小程序商城项目之侧栏分类效果(1)
2017/04/17 Javascript
axios取消请求的实践记录分享
2018/09/26 Javascript
浅谈vue中关于checkbox数据绑定v-model指令的个人理解
2018/11/14 Javascript
Vue项目中使用better-scroll实现一个轮播图自动播放功能
2018/12/03 Javascript
vue-better-scroll 的使用实例代码详解
2018/12/03 Javascript
微信小程序图表插件wx-charts用法实例详解
2019/05/20 Javascript
Node.js 的 GC 机制详解
2019/06/03 Javascript
微信小程序音乐播放器开发
2019/11/20 Javascript
vue打包静态资源后显示空白及static文件路径报错的解决
2020/09/02 Javascript
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
Python加载带有注释的Json文件实例
2018/05/23 Python
python浪漫表白源码
2019/04/05 Python
Python namedtuple命名元组实现过程解析
2020/01/08 Python
tensorflow自定义激活函数实例
2020/02/04 Python
英国山地公路自行车商店:Tweeks Cycles
2018/03/16 全球购物
GUESS Factory加拿大:牛仔裤、服装及配饰
2019/09/20 全球购物
大学生自我鉴定
2013/12/08 职场文书
关于幼儿的自我评价
2013/12/18 职场文书
新学期开学寄语
2014/01/18 职场文书
2014年扶贫工作总结
2014/11/18 职场文书
如何写辞职信
2015/05/13 职场文书
2016暑期校本培训心得体会
2016/01/08 职场文书
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js
Java8利用Stream对列表进行去除重复的方法详解
2022/04/14 Java/Android
oracle设置密码复杂度及设置超时退出的功能
2022/06/28 Oracle