Selenium(一):元素定位
一、Selenium 8种定位方式
baidu.html
<form id="form" name="f" action="/s" class="fm">
<span class="bg s_ipt_wr quickdelete-wrap">
<span class="soutu-btn"> </span>
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
1、通过id属性值定位
HTML 规定 id 属性在 HTML 文档中必须是唯一
driver.find_element_by_id('kw')
2、通过name属性值定位
driver.find_element_by_name('wd')
3、通过class属性值定位
driver.find_element_by_class_name('s_ipt')
4、通过tag定位(标签名定位)
driver.find_element_by_tag_name('input')
5、通过文本链接定位
link.html
<a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a>
driver.find_element_by_link_text('新闻')
6、通过文本链接模糊匹配进行定位
driver.find_element_by_partial_link_text('新')
7、Xpath定位
- 绝对定位
- 相对定位
绝对定位百度搜索框
driver.find_element_by_xpath('/html/body/div[1]/div[1]/div/div[1]/div/form/span[1]/input')
相对定位
| 表达式 | 描述 |
|---|---|
| / | 从根节点选取。 |
| // | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 |
| @ | 选取属性。 |
7.1、使用标签+元素属性定位
# //标签名[@属性名='属性值']
driver.find_element_by_xpath("//input[@id='kw']")
7.2、使用标签层级+标签+元素属性定位
# //标签名[@属性名='属性值']/标签名
driver.find_element_by_xpath("//span[@class='bg s_ipt_wr quickdelete-wrap']/input")
driver.find_element_by_xpath("//span[@class='bg s_ipt_wr quickdelete-wrap']/input[2]")
driver.find_element_by_xpath("//form[@id='form']/span/span/input[2]")
7.3、Xpath 多属性定位
# //标签名[@属性名='属性值' and @属性名='属性值']
driver.find_element_by_xpath("//input[@id='kw' and @class='s_ipt']")
更多语法查看XPath 语法
8、CSS定位
8.1、CSS ID 选择器
ID 选择器前面有一个 # 号 - 也称为棋盘号或井号
driver.find_element_by_css_selector('#kw')
8.2、CSS 类选择器
类名前有一个点号(.)
driver.find_element_by_css_selector('.s_ipt')
8.3、CSS 属性选择器
# 单属性定位
driver.find_element_by_css_selector("input[id='kw']")
# 多属性定位
driver.find_element_by_css_selector("input[id='kw'][name='wd']")
# 以kw开头
driver.find_element_by_css_selector("input[id=^'kw']")
# 以kw结尾
driver.find_element_by_css_selector("input[id=$'kw']")
更多语法查看CSS 选择器语法
二、Xpath定位 VS CSS定位

图片来源于网络
三、By定位
查看find_element_by_css_selector()函数
webdriver.py
from selenium.webdriver.common.by import By
class WebDriver(object):
def find_element_by_id(self, id_):
return self.find_element(by=By.ID, value=id_)
def find_element_by_name(self, name):
return self.find_element(by=By.NAME, value=name)
def find_element_by_tag_name(self, name):
return self.find_element(by=By.TAG_NAME, value=name)
def find_element_by_link_text(self, link_text):
return self.find_element(by=By.LINK_TEXT, value=link_text)
def find_element_by_partial_link_text(self, link_text):
return self.find_element(by=By.PARTIAL_LINK_TEXT, value=link_text)
def find_element_by_xpath(self, xpath):
return self.find_element(by=By.XPATH, value=xpath)
def find_element_by_css_selector(self, css_selector):
return self.find_element(by=By.CSS_SELECTOR, value=css_selector)
通过查看源码我们得知可以使用更底层元素定位方法find_element(by=By.CSS_SELECTOR, value=css_selector)
该方法的优势会在实际项目中的元素定位方法,显示等待方法封装中体现
base_page.py
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
TIME_OUT = 10
POLL_FREQUENCY = 0.5
class BasePage():
def __init__(self,driver):
self.dirver = driver
def find_element(self, locator):
try:
WebDriverWait(driver=self.driver, timeout=TIME_OUT,poll_frequency=POLL_FREQUENCY).until(EC.visibility_of_element_located(locator=locator))
except TimeoutException as e:
msg = "Time out when locate element using %s: %s" % (locator[0], locator[-1])
raise TimeoutException(msg)
return self.driver.find_element(*locator)
Selenium(一):元素定位的更多相关文章
- 【基础】selenium中元素定位的常用方法(三)
一.Selenium中元素定位共有八种 id name className tagName linkText partialLinkText xpath cssSelector 其中前六种都比较简单, ...
- [python爬虫] Selenium常见元素定位方法和操作的学习介绍(转载)
转载地址:[python爬虫] Selenium常见元素定位方法和操作的学习介绍 一. 定位元素方法 官网地址:http://selenium-python.readthedocs.org/locat ...
- selenium界面元素定位
一. Selenium界面元素定位 本文元素定位以das2为例 #导入包 from selenium import webdriver #打开火狐驱动 driver=webdriver ...
- python+selenium遇到元素定位不到的问题,顺便记录一下自己这次的错误(报错selenium.common.exceptions.NoSuchElementException)
今天在写selenium一个发送邮件脚本时,遇到一些没有找到页面元素的错误.经过自己反复调试,找原因百度,终于解决了.简单总结一下吧,原因有以下几点: 一:Frame控件嵌套,.Frame/Ifram ...
- Selenium Web元素定位方法
Selenium是用于Web应用测试的自动化测试框架,可以实现跨浏览器和跨平台的Web自动化测试.Selenium通过使用WebDriver API来控制web浏览器,每个浏览器都都有一个特定的Web ...
- 『心善渊』Selenium3.0基础 — 4、Selenium基础元素定位详解
目录 1.什么是元素定位 2.Selenium元素定位常用API (1)By_id 定位 (2)by_name 定位 (3)by_class_name 定位 (4)by_tag_name 定位 (5) ...
- 《手把手教你》系列技巧篇(十四)-java+ selenium自动化测试-元素定位大法之By xpath上卷(详细教程)
1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大. 使用这种方法几乎可以定位到页面上的任意元素. ...
- 《手把手教你》系列技巧篇(十五)-java+ selenium自动化测试-元素定位大法之By xpath中卷(详细教程)
1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大. 使用这种方法几乎可以定位到页面上的任意元素. ...
- 《手把手教你》系列技巧篇(十六)-java+ selenium自动化测试-元素定位大法之By xpath下卷(详细教程)
1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大. 使用这种方法几乎可以定位到页面上的任意元素. ...
- 《手把手教你》系列技巧篇(十七)-java+ selenium自动化测试-元素定位大法之By css上卷(详细教程)
1.简介 CSS定位方式和xpath定位方式基本相同,只是CSS定位表达式有其自己的格式.CSS定位方式拥有比xpath定位速度快,且比CSS稳定的特性.下面详细介绍CSS定位方式的使用方法.xpat ...
随机推荐
- C++,Windows/MFC_中L和_T()之区别
字符串前面加L表示该字符串是Unicode字符串._T是一个宏,如果项目使用了Unicode字符集(定义了UNICODE宏),则自动在字符串前面加上L,否则字符串不变.因此,Visual C++里边定 ...
- RNN,LSTM
RNN: Vanilla Neural Network :对单一固定的输入给出单一固定输出 Recurrent Neural Network:对单一固定的输入给出一系列输出(如:可边长序列),例:图片 ...
- 拒绝FileNotFoundException!总结了这几个读取jar包外配置文件的知识点
前言 相信很多人遇到过这个问题:本地运行的好好的程序,怎么部署到线上就报找不到配置呢? 初识getResource 案例一 FieldMapConfig.class.getResource(" ...
- 大数据基石——Hadoop与MapReduce
本文始发于个人公众号:TechFlow 近两年AI成了最火热领域的代名词,各大高校纷纷推出了人工智能专业.但其实,人工智能也好,还是前两年的深度学习或者是机器学习也罢,都离不开底层的数据支持.对于动辄 ...
- 【学习笔鸡】快速沃尔什变换FWT
[学习笔鸡]快速沃尔什变换FWT OR的FWT 快速解决: \[ C[i]=\sum_{j|k=i} A[j]B[k] \] FWT使得我们 \[ FWT(C)=FWT(A)*FWT(B) \] 其中 ...
- 原生js获取下拉框下标
// 获取下拉框所选下标 传入下拉框的id function getselectscheckitemindex (idStr) { let o = document.getElementById(id ...
- SpringBoot 2.X整合Mybatis
1.创建工程环境 勾选Web.Mybatis.MySQL,如下 依赖如下 <dependency> <groupId>org.springframework.boot</ ...
- Spring Cloud Stream消息驱动之RocketMQ入门(一)
SpringCloudStream目前支持的中间件有RabbitMQ.Kafka,还有我最近在学习的RocketMQ,以下是我学习的笔记 学习Spring cloud Stream 可以先学习一下了解 ...
- 如何修改Docker已运行实例的端口映射
如何修改Docker已运行实例的端口映射 Docker的端口映射,往往出现在两个阶段需要处理: 1.是在docker启动前就已经确定好,哪个docker实例映射哪个端口(往往这个情况比较,需要提前做规 ...
- JWT (一):认识 JSON Web Token
JWT(一):认识 JSON WebToken JWT(二):使用 Java 实现 JWT 什么是 JWT? JSON Web Token(JWT)是一种开放标准(RFC 7519),它定义了一种紧凑 ...