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装饰器使用方法实例
Nov 21 Python
python操作摄像头截图实现远程监控的例子
Mar 25 Python
python实现挑选出来100以内的质数
Mar 24 Python
python实现K最近邻算法
Jan 29 Python
Python下调用Linux的Shell命令的方法
Jun 12 Python
python 实现得到当前时间偏移day天后的日期方法
Dec 31 Python
如何通过python画loss曲线的方法
Jun 26 Python
在Django的View中使用asyncio的方法
Jul 12 Python
在tensorflow实现直接读取网络的参数(weight and bias)的值
Jun 24 Python
详解Pandas 处理缺失值指令大全
Jul 30 Python
python 逆向爬虫正确调用 JAR 加密逻辑
Jan 12 Python
Python爬取奶茶店数据分析哪家最好喝以及性价比
Sep 23 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/11/04 PHP
Jquery常用技巧收集整理篇
2010/11/14 Javascript
jquery浏览器滚动加载技术实现方案
2014/06/03 Javascript
node.js中的fs.readlink方法使用说明
2014/12/17 Javascript
javascript中parseInt()函数的定义和用法分析
2014/12/20 Javascript
动态加载jQuery的方法
2015/06/16 Javascript
Jquery ajax基础教程
2015/11/20 Javascript
JS去掉字符串前后空格、阻止表单提交的实现代码
2017/06/08 Javascript
Avalonjs双向数据绑定与监听的实例代码
2017/06/23 Javascript
用vue的双向绑定简单实现一个todo-list的示例代码
2017/08/03 Javascript
使用JS中的Replace()方法遇到的问题小结
2017/10/20 Javascript
JavaScript的setter与getter方法
2017/11/29 Javascript
一个基于react的图片裁剪组件示例
2018/04/18 Javascript
angularjs1.X 重构controller 的方法小结
2019/08/15 Javascript
vue 解决数组赋值无法渲染在页面的问题
2019/10/28 Javascript
Vue中图片Src使用变量的方法
2019/10/30 Javascript
JavaScript ES 模块的使用
2020/11/12 Javascript
python通过urllib2获取带有中文参数url内容的方法
2015/03/13 Python
Python实现堆排序的方法详解
2016/05/03 Python
Python使用回溯法子集树模板解决迷宫问题示例
2017/09/01 Python
Python爬虫之正则表达式基本用法实例分析
2018/08/08 Python
python实现归并排序算法
2018/11/22 Python
Pycharm 实现下一个文件引用另外一个文件的方法
2019/01/17 Python
python 读取.nii格式图像实例
2020/07/01 Python
django filter过滤器实现显示某个类型指定字段不同值方式
2020/07/16 Python
详解Pycharm与anaconda安装配置指南
2020/08/25 Python
前端制作动画的几种方式(css3,js)
2016/12/12 HTML / CSS
CSS3弹性盒模型开发笔记(三)
2016/04/26 HTML / CSS
CSS3截取字符串实例代码【推荐】
2018/06/07 HTML / CSS
Tory Burch美国官方网站:美国时尚生活品牌
2016/08/01 全球购物
英国办公家具网站:Furniture At Work
2019/10/07 全球购物
俄罗斯汽车零件和配件在线商店:CarvilleShop
2019/11/29 全球购物
前台文员的岗位职责
2013/11/14 职场文书
大学迎新晚会主持词
2014/03/24 职场文书
idea编译器vue缩进报错问题场景分析
2021/07/04 Vue.js
Android开发之底部导航栏的快速实现
2022/04/28 Java/Android