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修改Excel数据的实例代码
Nov 01 Python
python单元测试unittest实例详解
May 11 Python
python获取指定路径下所有指定后缀文件的方法
May 26 Python
Ubuntu安装Jupyter Notebook教程
Oct 18 Python
Django admin实现图书管理系统菜鸟级教程完整实例
Dec 12 Python
python中使用psutil查看内存占用的情况
Jun 11 Python
Flask框架URL管理操作示例【基于@app.route】
Jul 23 Python
Face++ API实现手势识别系统设计
Nov 21 Python
Python Web框架之Django框架cookie和session用法分析
Aug 16 Python
利用keras加载训练好的.H5文件,并实现预测图片
Jan 24 Python
详解有关PyCharm安装库失败的问题的解决方法
Feb 02 Python
新手学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
基于php实现长连接的方法与注意事项的问题
2013/05/10 PHP
PHP生成二维码的两个方法和实例
2014/07/01 PHP
php compact 通过变量创建数组
2016/11/15 PHP
在js中使用&quot;with&quot;语句中跨frame的变量引用问题
2007/03/08 Javascript
用ASP将SQL搜索出来的内容导出为TXT的代码
2007/07/27 Javascript
jquery入门—选择器实现隔行变色实例代码
2013/01/04 Javascript
jquery live()重复绑定的解决方法介绍
2014/01/03 Javascript
jQuery过滤选择器:not()方法使用介绍
2014/04/20 Javascript
jQuery操作select下拉框的text值和value值的方法
2014/05/31 Javascript
js类定义函数时用prototype与不用的区别示例介绍
2014/06/10 Javascript
JQuery之proxy实现绑定代理方法
2016/08/01 Javascript
vue按需引入element Transfer 穿梭框
2017/09/30 Javascript
JavaScript登录验证基础教程
2017/11/01 Javascript
JavaScript满天星导航栏实现方法
2018/03/08 Javascript
Node.Js生成比特币地址代码解析
2018/04/21 Javascript
vue.js图片转Base64上传图片并预览的实现方法
2018/08/02 Javascript
浅谈vux之x-input使用以及源码解读
2018/11/04 Javascript
JavaScript实现美化滑块效果
2019/05/17 Javascript
js实现简单进度条效果
2020/03/25 Javascript
基于jsbarcode 生成条形码并将生成的条码保存至本地+源码
2020/04/27 Javascript
谈谈JavaScript中的垃圾回收机制
2020/09/17 Javascript
python的else子句使用指南
2016/02/27 Python
tensorflow建立一个简单的神经网络的方法
2018/02/10 Python
Python+request+unittest实现接口测试框架集成实例
2018/03/16 Python
python实现linux下抓包并存库功能
2018/07/18 Python
python 堆和优先队列的使用详解
2019/03/05 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
2020/04/22 Python
Python格式化输出--%s,%d,%f的代码解析
2020/04/29 Python
Python-jenkins模块获取jobs的执行状态操作
2020/05/12 Python
python如何进行矩阵运算
2020/06/05 Python
Python绘图之柱形图绘制详解
2020/07/28 Python
Python实现快速大文件比较代码解析
2020/09/04 Python
关于母亲节的感言
2014/02/04 职场文书
酒店管理毕业生自荐信
2014/05/25 职场文书
2015年政务公开工作总结
2015/05/19 职场文书