Selenium实现元素定位
Selenium提供了定位元素的方法find_element(),该方法被定义在WebDriver类中。
一、参数
1、两个参数,参数1根据不同定位方法确定,定位方法如下:
(1)通过id定位:使用参数By.ID定位元素的ID属性;
(2)通过元素名定位:使用参数By.NAME定位元素的NAME属性;
(3)通过标签名定位:使用参数BY.TAG_NAME定位元素的TAG_NAME属性;一般不使用该参数,使用该参数后方法会返回list,不能准确定位所找元素
(4)通过xpath定位:使用参数By.XPATH通过xpath表达式定位元素;
(5)通过css class定位:使用参数By.CLASS_NAME定位元素的class属性;
(6)通过css选择器定位:使用参数By.CSS_SELECTOR通过CSS选择器定位元素;
(7)通过链接文本定位:使用参数By.LINK_TEXT定位元素
(8)通过部分链接文本定位:使用参数By.PARTIAL_LINK_TEXT定位元素
2、参数2为上述对应属性的值
如何确定参数2:打开网页,选择任意元素,比如输入框,按钮,右键单击检查,就会有对应属性出现。以百度为例:


By.ID="kw"
By.NAME="wd"
By.TAG_NAME="input"
By.CLASS_NAME="s_ipt"
By.XPATH和By.CSS_SELECTOR可右键单击该元素,直接复制
By.LINK_TEXT和By.PARTIAL_LINK_TEXT为页面上任意链接文本,比如百度页面上的"新闻","首页"等,均可作为其值,两者区别在于,前者为链接的全部文本,后者为链接的部分文本

二、返回值
返回一个WebElement对象,这个对象代表页面上的一个元素
三、简单的代码示例
以下是一个简单的示例代码,展示如何使用find_element()方法通过各个属性定位元素
点击查看代码
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
#将各个元素定位方法封装成一个类
class TestCase:
#初始化方法
def __init__(self):
#驱动程序打开浏览器
self.driver=webdriver.Edge()
#跳转对应网页
self.driver.get("http://www.baidu.com")
#网页最大化
self.driver.maximize_window()
#通过id定位元素
def test_id(self):
#网页中定位到输入框,输入关键词python
self.driver.find_element(By.ID,"kw").send_keys("python")
#定位到按钮并点击搜索
self.driver.find_element(By.ID,"su").click()
sleep(2)
quit()
#通过name定位元素
def test_name(self):
self.driver.find_element(By.NAME,"wd").send_keys("selenium")
self.driver.find_element(By.ID,"su").click()
sleep(2)
quit()
#通过xpath定位元素
def test_xpath(self):
self.driver.find_element(By.XPATH,"//*[@id='kw']").send_keys("selenium")
self.driver.find_element(By.XPATH,"//*[@id='su']").click()
sleep(2)
quit()
#通过CSS_SELECTOR定位
def test_css_selector(self):
self.driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("selenium")
self.driver.find_element(By.CSS_SELECTOR,"#su").click()
sleep(2)
quit()
#通过CSS_NAME定位元素
def test_class_name(self):
self.driver.find_element(By.CLASS_NAME,"s_ipt").send_keys("selenium")
self.driver.find_element(By.ID,"su").click()
sleep(2)
quit()
#通过LINK_TEXT定位元素
def test_link_text(self):
#网页中找到"贴吧"文本的链接并点击
self.driver.find_element(By.LINK_TEXT,"贴吧").click()
sleep(2)
quit()
#通过PARTIAL_LINK_TEXT定位元素
def test_partial_link_text(self):
#网页中找到含有"AI"文本的链接并点击
self.driver.find_element(By.PARTIAL_LINK_TEXT,"AI").click()
sleep(2)
quit()
if __name__ == "__main__":
testcase = TestCase()
#testcase.test_id()
#testcase.test_name()
#testcase.test_xpath()
#testcase.test_css_selector()
#testcase.test_class_name()
#testcase.test_link_text()
testcase.test_partial_link_text()
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 ...
随机推荐
- 【技术积累】如何处理Feign的超时问题
在使用Feign进行微服务之间的通信时,由于网络延迟等原因,可能会出现请求超时的情况.为了解决这个问题,我们可以对Feign进行配置,设置超时时间. 配置Feign的超时时间 在使用Feign时,我们 ...
- wpf 如何7步写一个badge控件
首先看一下效果: 任意控件可以附加一个文字在控件的右上角,并带有红色背景 第一步,新建一个空的wpf项目: 第二步,创建一个类,取名为badge: 第三步,将badge的父类设置成 System.W ...
- 16-canvas绘制圆弧
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...
- 本地部署 Overleaf 服务
️ 注意:本教程只适用于 macOS / Linux 操作系统.如果需要在 Windows 上部署 Overleaf,请先安装 WSL,之后在 WSL 中部署 Overleaf . 本地部署 Over ...
- 【Docker】之重启容器相关命令
我想每次打开电脑,只要自动运行docker的时候,马上把设置指定的容器也自动运行起来. 首先查看一下容器启动情况: # 查看docker运行命令 docker ps -a --restart参数有3个 ...
- uni-app 小程序用户信息之头像昵称填写
小程序获取用户头像昵称,微信又叒做妖,废除之前的接口,改成了头像昵称填写 通知:微信小程序端基础库2.27.1及以上版本,wx.getUserProfile 接口被收回,详见<小程序用户头像昵称 ...
- chrome.tabs.sendMessage和chrome.runtime.sendMessage的用法及区别
在 Chrome 扩展开发中,chrome.tabs.sendMessage 和 chrome.runtime.sendMessage 是用于不同目的的消息发送 API,它们的主要区别在于消息的目标对 ...
- python pyqt6 QComboBox 圆角边框
圆角边框周围显示黑色直角 QComboBox 新增 如下设定即可 xxx_source.view().window().setWindowFlag(Qt.WindowType.NoDropShado ...
- spm 一阶分析的Microtime onset应该如何填写?
1. 如果对数据进行了slice timing, 那么在进行一阶分析时应该修改microtime onset和 microtime resolution这两个参数, 假设数据的slice order= ...
- T2回家(home)题解
T2回家(home) 现在啥也不是了,虽然会了逆元,但是对期望概率题还是一窍不通,赛时相当于只推出了 \(n=1\) 的情况,结果运用到所有情况,理所应当只有20分. 题目描述 小Z是个路痴.有一天小 ...