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的tkinter布局之简单的聊天窗口实现方法
Sep 03 Python
30分钟搭建Python的Flask框架并在上面编写第一个应用
Mar 30 Python
Python同时向控制台和文件输出日志logging的方法
May 26 Python
开源软件包和环境管理系统Anaconda的安装使用
Sep 04 Python
python实现关键词提取的示例讲解
Apr 28 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
Jul 16 Python
Python线程同步的实现代码
Oct 03 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
Jun 27 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
Aug 27 Python
python对文件的操作方法汇总
Feb 28 Python
Django的ListView超详细用法(含分页paginate)
May 21 Python
Python confluent kafka客户端配置kerberos认证流程详解
Oct 12 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
ThinkPHP框架实现session跨域问题的解决方法
2014/07/01 PHP
ThinkPHP里用U方法调用js文件实例
2015/06/18 PHP
PHP实现中国公民身份证号码有效性验证示例代码
2017/05/03 PHP
JQuery Easyui Tree的oncheck事件实现代码
2010/05/28 Javascript
js中判断控件是否存在
2010/08/25 Javascript
jquery插件validate验证的小例子
2013/05/08 Javascript
Jquery选中或取消radio示例
2013/09/29 Javascript
jquery ajax 如何向jsp提交表单数据
2015/08/23 Javascript
jQuery获取table行数并输出单元格内容的实现方法
2016/06/30 Javascript
Three.js学习之正交投影照相机
2016/08/01 Javascript
jQuery实现的兼容性浮动层示例
2016/08/02 Javascript
利用BootStrap弹出二级对话框的简单实现方法
2016/09/21 Javascript
BootStrap tooltip提示框使用小结
2016/10/26 Javascript
详解Vue 非父子组件通信方法(非Vuex)
2017/05/24 Javascript
jQuery+ajax实现局部刷新的两种方法
2017/06/08 jQuery
微信小程序防止多次点击跳转和防止表单组件输入内容多次验证功能(函数防抖)
2019/09/19 Javascript
vue实现简单加法计算器
2020/10/22 Javascript
[01:05:36]VP vs TNC Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
Python 正则表达式实现计算器功能
2017/04/29 Python
Python基于回溯法子集树模板解决找零问题示例
2017/09/11 Python
用python制作游戏外挂
2018/01/04 Python
python运行时强制刷新缓冲区的方法
2019/01/14 Python
python二维键值数组生成转json的例子
2019/12/06 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
2020/04/30 Python
瑞典轮胎在线:Tirendo.se
2018/06/21 全球购物
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
手工制作的意大利太阳镜和光学元件:Illesteva
2019/01/19 全球购物
元旦联欢会主持词
2014/03/26 职场文书
春风行动实施方案
2014/03/28 职场文书
《春笋》教学反思
2014/04/15 职场文书
护士实习求职信
2014/06/22 职场文书
2014年民政局关于保密工作整改措施
2014/09/19 职场文书
创先争优宣传标语
2014/10/08 职场文书
银行员工考核评语
2014/12/31 职场文书
前台文员岗位职责
2015/02/04 职场文书
2016国庆节67周年红领巾广播稿
2015/12/18 职场文书