一、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(一):元素定位的更多相关文章

  1. 【基础】selenium中元素定位的常用方法(三)

    一.Selenium中元素定位共有八种 id name className tagName linkText partialLinkText xpath cssSelector 其中前六种都比较简单, ...

  2. [python爬虫] Selenium常见元素定位方法和操作的学习介绍(转载)

    转载地址:[python爬虫] Selenium常见元素定位方法和操作的学习介绍 一. 定位元素方法 官网地址:http://selenium-python.readthedocs.org/locat ...

  3. selenium界面元素定位

    一.        Selenium界面元素定位 本文元素定位以das2为例 #导入包 from selenium import  webdriver #打开火狐驱动 driver=webdriver ...

  4. python+selenium遇到元素定位不到的问题,顺便记录一下自己这次的错误(报错selenium.common.exceptions.NoSuchElementException)

    今天在写selenium一个发送邮件脚本时,遇到一些没有找到页面元素的错误.经过自己反复调试,找原因百度,终于解决了.简单总结一下吧,原因有以下几点: 一:Frame控件嵌套,.Frame/Ifram ...

  5. Selenium Web元素定位方法

    Selenium是用于Web应用测试的自动化测试框架,可以实现跨浏览器和跨平台的Web自动化测试.Selenium通过使用WebDriver API来控制web浏览器,每个浏览器都都有一个特定的Web ...

  6. 『心善渊』Selenium3.0基础 — 4、Selenium基础元素定位详解

    目录 1.什么是元素定位 2.Selenium元素定位常用API (1)By_id 定位 (2)by_name 定位 (3)by_class_name 定位 (4)by_tag_name 定位 (5) ...

  7. 《手把手教你》系列技巧篇(十四)-java+ selenium自动化测试-元素定位大法之By xpath上卷(详细教程)

    1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大.  使用这种方法几乎可以定位到页面上的任意元素. ...

  8. 《手把手教你》系列技巧篇(十五)-java+ selenium自动化测试-元素定位大法之By xpath中卷(详细教程)

    1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大.  使用这种方法几乎可以定位到页面上的任意元素. ...

  9. 《手把手教你》系列技巧篇(十六)-java+ selenium自动化测试-元素定位大法之By xpath下卷(详细教程)

    1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大.  使用这种方法几乎可以定位到页面上的任意元素. ...

  10. 《手把手教你》系列技巧篇(十七)-java+ selenium自动化测试-元素定位大法之By css上卷(详细教程)

    1.简介 CSS定位方式和xpath定位方式基本相同,只是CSS定位表达式有其自己的格式.CSS定位方式拥有比xpath定位速度快,且比CSS稳定的特性.下面详细介绍CSS定位方式的使用方法.xpat ...

随机推荐

  1. 21.python的模块(Module)和包(Package)

    目录 模块(Module)和包(Package) 模块(modue)的概念 模块导入方法 1.import 语句 2.from-import 语句 3.from-import* 语句 4.运行本质 i ...

  2. POJ-1741 树上分治--点分治(算法太奇妙了)

    给你1e5个节点的树,(⊙﹏⊙) 你能求出又几对节点的距离小于k吗??(分治NB!) 这只是一个板子题,树上分治没有简单题呀!(一个大佬说的) #include<cstdio> #incl ...

  3. Python基础入门必备知识

    1 标识符标识符是编程时使用的名字,用于给变量.函数.语句块等命名,Python 中标识符由字母.数字.下划线组成,不能以数字开头,区分大小写. 以下划线开头的标识符有特殊含义,单下划线开头的标识符, ...

  4. 软考网络工程师、软件设计师等官方指定教材pdf文件

    软考计算机网络工程师教材pdf 链接:https://pan.baidu.com/s/1-UXeNye414UWYxYRC6bHuA 提取码:5z9w 软考计算机软件设计师第五版pdf 链接:http ...

  5. U盘中了蠕虫病毒,文件夹都变成exe了,怎么办?

    昨天做实验,用U盘拷了实验室的文件,然后就中了病毒了(无奈),U盘里的文件全都变成了exe.有点慌张,我的U盘里存了很多课程资料.然而,我懒得下载杀毒软件.参考这位博主的做法,我成功的找回了我隐藏的文 ...

  6. 傅立叶变换—DFT

    背景:最近看到实验室其他同学在用傅立叶变换解决问题,我也想通过并行来解决这个问题,所以看了一下傅立叶变换的东西,感觉涵盖的东西还能多,我只是初步做了一下了解(一定很片面,但是我主要是为了应用它,主要了 ...

  7. KafkaProducer Sender 线程详解(含详细的执行流程图)

    目录 1.Sender 线程详解 2.RecordAccumulator 核心方法详解 温馨提示:本文基于 Kafka 2.2.1 版本. 上文 <源码分析 Kafka 消息发送流程> 已 ...

  8. 20.用PyInstaller打包py程序的步骤及问题解决

    最近写了一个移动和复制文件的代码,代码完成之后,想将其打包成一个可以在任何电脑上使用的软件, 于是在网上查找相关资料,可以用PyInstaller打包成.exe程序,以下是具体步骤: 1.安装PyIn ...

  9. 基于JGraphT实现的路径探寻

    基于JGraphT实现的路径探寻 业务中提出基于内存,探寻的两点间的有向以及无向路径,多点间的最小子图等需求,以下记录使用JGraphT的实现过程. GraphT是免费的Java类库,提供数学图论对象 ...

  10. 解决vue中element组件样式修改无效

    vue中element组件样式修改无效 <style> .detail{ .el-input__inner { height: 48px; } } </style> 直接写st ...