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元组操作实例解析
Sep 23 Python
OpenCV实现人脸识别
Apr 07 Python
Python实现好友全头像的拼接实例(推荐)
Jun 24 Python
Python常见工厂函数用法示例
Mar 21 Python
基于django传递数据到后端的例子
Aug 16 Python
详解Django配置优化方法
Nov 18 Python
使用NumPy读取MNIST数据的实现代码示例
Nov 20 Python
Python模拟FTP文件服务器的操作方法
Feb 18 Python
什么是python的必选参数
Jun 21 Python
Python使用tkinter实现小时钟效果
Feb 22 Python
windows安装python超详细图文教程
May 21 Python
Python first-order-model实现让照片动起来
Jun 25 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产生随机字符串函数
2006/12/06 PHP
php实现二进制和文本相互转换的方法
2015/04/18 PHP
PHP实现的文件上传类与用法详解
2017/07/05 PHP
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
jquery中获取id值方法小结
2013/09/22 Javascript
js中函数声明与函数表达式
2015/06/03 Javascript
jquery实现叠层3D文字特效代码分享
2015/08/21 Javascript
jqTransform美化表单
2015/10/10 Javascript
基于jquery实现省市联动效果
2015/11/23 Javascript
JavaScript图像延迟加载库Echo.js
2016/04/05 Javascript
浅谈Angularjs link和compile的使用区别
2016/10/21 Javascript
vue中动态绑定表单元素的属性方法
2018/02/23 Javascript
JS立即执行函数功能与用法分析
2019/01/15 Javascript
Vue服务端渲染实践之Web应用首屏耗时最优化方案
2019/03/22 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
2019/04/25 Javascript
vue服务端渲染操作简单入门实例分析
2019/08/28 Javascript
js实现移动端tab切换时下划线滑动效果
2019/09/08 Javascript
layui框架与SSM前后台交互的方法
2019/09/12 Javascript
Python编程之字符串模板(Template)用法实例分析
2017/07/22 Python
利用pandas将numpy数组导出生成excel的实例
2018/06/14 Python
Tensorflow 同时载入多个模型的实例讲解
2018/07/27 Python
IntelliJ IDEA安装运行python插件方法
2018/12/10 Python
Django项目中实现使用qq第三方登录功能
2019/08/13 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
2019/10/21 Python
python代码打印100-999之间的回文数示例
2019/11/24 Python
python numpy库linspace相同间隔采样的实现
2020/02/25 Python
基于python实现地址和经纬度转换
2020/05/19 Python
关于HTML5 Placeholder新标签低版本浏览器下不兼容的问题分析及解决办法
2016/01/27 HTML / CSS
英国和爱尔兰的自炊式豪华度假小屋:Rural Retreats
2018/06/08 全球购物
巴西购物网站:Onofre Agora
2020/06/08 全球购物
珍珠奶茶店创业计划书
2014/01/11 职场文书
学校四风对照检查材料
2014/08/28 职场文书
村党的群众路线教育实践活动总结材料
2014/10/31 职场文书
项目备案申请报告
2015/05/15 职场文书
呼啸山庄读书笔记
2015/06/29 职场文书
idea以任意顺序debug多线程程序的具体用法
2021/08/30 Java/Android