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中heapq模块的用法
Jun 28 Python
python使用jieba实现中文分词去停用词方法示例
Mar 11 Python
Python GUI Tkinter简单实现个性签名设计
Jun 19 Python
Kali Linux安装ipython2 和 ipython3的方法
Jul 11 Python
对YOLOv3模型调用时候的python接口详解
Aug 26 Python
python使用if语句实现一个猜拳游戏详解
Aug 27 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
Sep 16 Python
Pytorch模型转onnx模型实例
Jan 15 Python
基于python实现计算且附带进度条代码实例
Mar 31 Python
Xadmin+rules实现多选行权限方式(级联效果)
Apr 07 Python
解决Opencv+Python cv2.imshow闪退问题
Apr 24 Python
Python基于smtplib协议实现发送邮件
Jun 03 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_build_query 的一个问题
2012/03/25 PHP
[原创]ThinkPHP让../Public在模板不解析(直接输出)的方法
2015/10/09 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
2016/01/19 PHP
yii2超好用的日期组件和时间组件
2016/05/05 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
javascript获取当前日期时间及其它操作函数
2011/01/11 Javascript
js离开或刷新页面检测(且兼容FF,IE,Chrome)
2014/03/05 Javascript
JS动态改变表格边框宽度的方法
2015/03/31 Javascript
jquery插件star-rating.js实现星级评分特效
2015/04/15 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
2015/11/16 Javascript
页面向下滚动ajax获取数据的实现方法(兼容手机)
2016/05/24 Javascript
jQuery中on绑定事件后引发的事件冒泡问题如何解决
2016/05/25 Javascript
Angularjs 双向绑定时字符串的转换成数字类型的问题
2017/06/12 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
微信小程序支付功能 php后台对接完整代码分享
2018/06/12 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
2019/09/03 Javascript
Python中实现对Timestamp和Datetime及UTC时间之间的转换
2015/04/08 Python
python删除列表内容
2015/08/04 Python
详解用Python处理HTML转义字符的5种方式
2017/12/27 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
2018/06/13 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
2019/04/18 Python
Python中一些深不见底的“坑”
2019/06/12 Python
浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置
2020/06/30 Python
python如何使用腾讯云发送短信
2020/09/17 Python
HTML5实现表单自动验证功能实例代码
2017/01/11 HTML / CSS
异常和异常类的概念
2014/09/12 面试题
大学生村官任职感言
2014/01/09 职场文书
英语课外活动总结
2014/08/27 职场文书
2014年宣传思想工作总结
2014/12/10 职场文书
服务承诺书
2015/01/19 职场文书
民间借贷被告代理词
2015/05/23 职场文书
2015年物业公司保洁工作总结
2015/10/22 职场文书
python异步的ASGI与Fast Api实现
2021/07/16 Python
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
2022/03/16 Redis
解决Mysql报错 Table 'mysql.user' doesn't exist
2022/05/06 MySQL
微软发布Windows 11今年最大更新22H2(附 ISO 镜像官方下载)
2022/09/23 数码科技