python中通过selenium简单操作及xpath元素定位&轴定位
浏览器的简单操作 # 导入webdriver模块 # 创建driver对象,指定Chrome浏览器
driver = webdriver.Chrome()
# 窗口最大化
driver.maximize_window()
# 设置窗口自定义,参数单位为像素
driver.set_window_size(800, 600)
# 访问百度
driver.get("http://baidu.com")
# 后退
driver.back()
# 前进
driver.forward()
# 刷新
driver.refresh() # 关闭窗口
driver.close()
# 关闭会话,关闭浏览器,关闭chromedriver
driver.quit()
selenium的8种定位方式
6种靠单一的特征来找元素(id, calss_name, tag_name, name, link_text(2))
组合各种特征和关系来找元素(xpath, css)
1.id定位:唯一
find_element_by_id()
2.name定位:不唯一
find_element_by_name()
find_elements_by_name()
3.class定位:不唯一
find_element_by_class()
4.tag_name定位:不唯一
find_element_by_tag_name() # 单数,在DOM页面中,匹配到的第一个元素
find_elements_by_tag_name() # 复数,返回的是一个列表,元素为webElement对象,全部匹配的元素
5.文本匹配:/完全匹配/部分匹配
find_element_by_link_text()
find_element_by_partial_link_text()
Xpath定位:
1.通过自己来定位:
语法://标签名[@属性名=值]
例如:
//*[@id="mCon"]/span # *匹配所有元素
//*[@id="kw"]
2.通过文本来定位:
语法://标签名[text()="值"]
例如:
//h1[(text()= "第20期")] # 完全匹配
contains(@属性名/text(), 被包含的内容)
//h1[contains(text(), "第20期")] # 部分匹配,包含
//h1[contains(@id, "ccc")] # 部分匹配,包含
3.层级定位:
如果找到的元素有两个或多个完全一样的元素,那么就通过他们不同的父级或父级的父级来定位
/ 绝对定位,单斜杠只能写子级,不能跳级写
// 相对定位,双斜杠可以写子级,子级的子级等等(推荐使用)
举例说明:

l 输入账号
//div//input[@name="account"]
//div[@class="padding-cont pt-login"]//input[@placeholder="邮箱/账号/手机号"]
l 输入密码
//div[@class="padding-cont pt-login"]//input[@name="pass"]
//div[@class="padding-cont pt-login"]//input[@type="password"]
l 下次自动登录
//div[@class="padding-cont pt-login"]//a[text()="下次自动登录"]
//div[@class="padding-cont pt-login"]//a[@class="auto-login fl"]
l 忘记密码
//div[@class="padding-cont pt-login"]//a[@class="forget fr"]
//div[@class="padding-cont pt-login"]//a[text()="忘记密码?"]
l 登录按钮
//div[@class="padding-cont pt-login"]//a[@class="btn-btn"]
//div[@class="padding-cont pt-login"]//a[text()="登录"]
Xpath轴定位:
含义:通过同级目录来定位元素,叫做轴定位
轴运算:
ancestor:祖先节点,包括父节点
parent:父节点
preceding-sibling:当前元素节点标签之前的所有兄弟节点
following-sibling:当前元素节点标签之后的所有兄弟节点
preceding:当前元素节点标签之前的所有节点(HTML页面先后顺序)
following:当前元素节点标签之后所有的节点(HTML页面先后顺序)
轴定位语法:
已知元素表达式/轴名称::标签名称[@属性名=值]
示例:例://div//table//td//preceding::td
应用场景:
页面显示为一个表格样式的数据列,需要通过组合来定位元素
# 单数
driver.find_element_by_xpath()
# 复数
driver.find_elements_by_xpath()
xpath轴扩展资料:https://www.w3school.com.cn/xpath/xpath_axes.asp
python中通过selenium简单操作及xpath元素定位&轴定位的更多相关文章
- Python中json的简单读写操作
Python中json的简单读写操作 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的 ...
- 【转】python 历险记(四)— python 中常用的 json 操作
[转]python 历险记(四)— python 中常用的 json 操作 目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编 ...
- python中文件的基础操作
打开文件的三种方式: open(r'E:\学习日记\python\code\文件的简单操作.py') open('E:\\学习日记\\python\\code\\文件的简单操作.py') open(' ...
- 在Python中使用lambda高效操作列表的教程
在Python中使用lambda高效操作列表的教程 这篇文章主要介绍了在Python中使用lambda高效操作列表的教程,结合了包括map.filter.reduce.sorted等函数,需要的朋友可 ...
- python中argparse模块简单使用
python中argparse模块简单使用 简介 argparse是python用于解析命令行参数和选项的标准模块.argparse模块的作用是用于解析命令行参数. 使用步骤 1.首先导入该模块 2. ...
- 无法更新 EntitySet“SoreInfo_Table”,因为它有一个 DefiningQuery,而 <ModificationFunctionMapping> 元素中没有支持当前操作的 <InsertFunction> 元素。
无法更新 EntitySet"SoreInfo_Table",因为它有一个 DefiningQuery,而 <ModificationFunctionMapping> ...
- 无法更新 EntitySet“Ips_Articles”,因为它有一个 DefiningQuery,而 <ModificationFunctionMapping> 元素中没有支持当前操作的 <InsertFunction> 元素。
今天我在使用ef的时候,发现了这样的报错. 无法更新 EntitySet“Ips_Articles”,因为它有一个 DefiningQuery,而 <ModificationFunctionMa ...
- 无法更新 EntitySet“W_ReceiveData”,因为它有一个 DefiningQuery,而 <ModificationFunctionMapping> 元素中没有支持当前操作的 <InsertFunction> 元素。
无法更新 EntitySet“W_ReceiveData”,因为它有一个 DefiningQuery,而 <ModificationFunctionMapping> 元素中没有支持当前操作 ...
- python中的MySQL数据库操作 连接 插入 查询 更新 操作
MySQL数据库 就数据库而言,连接之后就要对其操作.但是,目前那个名字叫做qiwsirtest的数据仅仅是空架子,没有什么可操作的,要操作它,就必须在里面建立“表”,什么是数据库的表呢?下面摘抄自维 ...
随机推荐
- layui之table.render使用(含后台详细代码实现)
效果图如下: 前端实现代码如图(完整代码): <!DOCTYPE html> <html> <head> <meta charset="utf-8& ...
- NIOBuffer 缓冲区
Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然Java NIO 中除此之外还有很多类和组件,但是,Channel,Buffer 和 Select ...
- [Gamma阶段]第六次Scrum Meeting
Scrum Meeting博客目录 [Gamma阶段]第六次Scrum Meeting 基本信息 名称 时间 地点 时长 第六次Scrum Meeting 19/06/1 大运村寝室6楼 25min ...
- android中SELINUX规则分析和语法简介
1. SELINUX是可以理解为一种android上面的安全机制,是有美国国家安全局和一些公司设计的一个针对linux的安全加强系统我们可以通过配置SELINUX的相关policy,来定制自己的手机的 ...
- java字符串格式化性能对比String.format/StringBuilder/+拼接
String.format由于每次都有生成一个Formatter对象,因此速度会比较慢,在大数据量需要格式化处理的时候,避免使用String.format进行格式化,相反使用StringUtils.l ...
- 【Python】解析Python中的文件操作
目录结构: contents structure [-] 简介 Python中的文件类型 内置函数的文件操作 open()函数 Mode 创建文本文件 读取文本文件 循环文件对象 关闭文件 With语 ...
- PHPUnit 单元测试教程
一.官网下载对应 PHP 版本的代码库 https://phpunit.de/getting-started-with-phpunit.html 二.安装 PHPUnit 官网提供了两种方法安装 1. ...
- CentOS7静默安装Oracle 18g数据库(无图形化界面)
说明: 因为是静默安装,所以我们不需要安装图形界面 准备:下载Oracle软件 官方网站:http://www.oracle.com/technetwork/database/enterprise-e ...
- 在Windows平台下使用Gitblit搭建Git服务器图文解说
Windows平台下Git服务器搭建 一.java环境变量的设置 下载jdk并配置jdk的环境变量,JAVA_HOME,CLASSPATH以及PATH,最后在DOS窗口输入java -version检 ...
- 华硕主板 Vmware虚拟机 二进制转换与此平台上的长模式不兼容
出现情况如下: 大概遇到过两次这个问题,第一次是在笔记本VM上装虚拟机,第二次是在台式机VM上装虚拟机. 原因是因为虚拟化(Intel Virtualization Technology)技术,在主板 ...