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+pyqt实现右下角弹出框
Oct 26 Python
基于Python实现的ID3决策树功能示例
Jan 02 Python
tornado 多进程模式解析
Jan 15 Python
浅谈Python对内存的使用(深浅拷贝)
Jan 17 Python
Python使用functools实现注解同步方法
Feb 06 Python
Python3实现的旋转矩阵图像算法示例
Apr 03 Python
详解使用Python下载文件的几种方法
Oct 13 Python
Python大数据之使用lxml库解析html网页文件示例
Nov 16 Python
python序列化与数据持久化实例详解
Dec 20 Python
浅谈matplotlib.pyplot与axes的关系
Mar 06 Python
基于python爬取梨视频实现过程解析
Nov 09 Python
Django集成富文本编辑器summernote的实现步骤
May 31 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 缩略图实现函数代码
2011/06/23 PHP
关于PHP session 存储方式的详细介绍
2013/06/25 PHP
PHP实现AES256加密算法实例
2014/09/22 PHP
Windows2003下php5.4安装配置教程(IIS)
2016/06/30 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
php连接mysql数据库最简单的实现方法
2019/09/24 PHP
js form 验证函数 当前比较流行的错误提示
2009/06/23 Javascript
UpdatePanel和Jquery冲突的解决方法
2013/04/01 Javascript
JScript中的条件注释详解
2015/04/24 Javascript
Ionic默认的Tabs模板使用实例
2016/08/29 Javascript
jQuey将序列化对象在前台显示地实现代码(方法总结)
2016/12/13 Javascript
JavaScript注册时密码强度校验代码
2017/06/30 Javascript
js es6系列教程 - 新的类语法实战选项卡(详解)
2017/09/02 Javascript
JavaScript中将值转换为字符串的五种方法总结
2019/06/06 Javascript
微信小程序上传图片并等比列压缩到指定大小的实例代码
2019/10/24 Javascript
Python创建模块及模块导入的方法
2015/05/27 Python
Python入门学习之字符串与比较运算符
2015/10/12 Python
SVM基本概念及Python实现代码
2017/12/27 Python
python输出电脑上所有的串口名的方法
2019/07/02 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
Python 实现网课实时监控自动签到、打卡功能
2020/03/12 Python
sqlalchemy实现时间列自动更新教程
2020/09/02 Python
Pycharm安装Qt Design快捷工具的详细教程
2020/11/18 Python
HTML5+CSS3实现机器猫
2016/10/17 HTML / CSS
html5 http的轮询和Websocket原理
2018/10/19 HTML / CSS
大二法英学生职业生涯规划范文
2014/02/27 职场文书
体育口号大全
2014/06/18 职场文书
学校组织向国旗敬礼活动方案(中小学适用)
2014/09/27 职场文书
运动会加油稿20字
2014/11/15 职场文书
辞职信范文大全
2015/03/02 职场文书
张思德观后感
2015/06/09 职场文书
实用求职信模板范文
2019/05/13 职场文书
vue响应式原理与双向数据的深入解析
2021/06/04 Vue.js
在CSS中使用when/else的方法
2022/01/18 HTML / CSS
JavaScript中的LHS和RHS分析详情
2022/04/06 Javascript
Java服务调用RestTemplate与HttpClient的使用详解
2022/06/21 Java/Android