当前位置: 首页 > news >正文

python + selenium_元素定位

selenium2.0新增了webdrive,它是利用浏览器原生的API封装了一些底层操作的功能,支持python、java、php
selenium原理:三步走
代码的请求发送给浏览器驱动,
驱动像出租车司机解析了我们的需求
开着浏览器把我们送到了目的地

webdriver扮演了什么角色:
是selenium三个核心之一,封装了对浏览器操作的函数,方便我们直接调用,实现对浏览器的操控。

1、python基础知识,不说,请买一本“python编程从入门到实践”自行掌握。
涉及内容:搭建环境、变量、数据类型、列表、操作列表、if语句、字典、用户输入和while循环、函数、类、文件和异常处理、测试代码

2、元素定位
selenium中根据HTML页面元素的属性来定位,在web中操作步骤如下:
(1)定位页面元素,获取元素
(2)对元素实施操:单击、双击、拖拽、输入值等

selenium提供了8中定位方法,是id、name、xpath、class name 、tag name、link_text、partial link text 及css selector

id定位
HTML tag的id值是唯一,故不存在id定位多个元素情况,能用id就不用其他,增加维护成本,例:
百度首页输入python,执行后:

#coding=utf-8
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.find_element_by_id("kw").send_keys("python")

css定位
css主要是用id、class定位的,它定位选择器有十几种,优点:速度快、语法简洁,是真的简洁
css用id定位:

driver.find_element_by_css_selector("#kw").send_keys("python")

css用class定位:

driver.find_element_by_css_selector(".s_ipt").send_keys("python")

其他属性定位:

driver.find_element_by_css_selector('[name="wd"]')

复合定位:

driver.find_element_by_css_selector('[angwox="wd"][autocomplete="off"]')

模糊定位:

# 定位style值以tfjiao开头的元素
driver.find_element_by_css_selector('[style^="tfjiao"]').click()
# 定位style值以tengfei.gif结尾的元素
driver.find_element_by_css_selector('div[style$="tengfei.gif"]').click()
# 定位style值包含tengfei的元素
driver.find_element_by_css_selector('div[style*="tengfei"]').click()

右键复制:
选中元素,右键复制绝对路径,好像没啥说的
复制后粘贴:#form > input[type=hidden]:nth-child(3)

link_text
值是:超链接的全部名字
新闻

#coding=utf-8
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.find_element_by_link_text("新闻").click()

xpth定位
xpth是xml path语言的缩写,是一种用来确定xml文档中某部分位置的语言。xpath比css灵活,比css速度慢
(1)定位界面文本,这个用的挺多

driver.find_element_by_xpath('//*[text()="kw"]').click()

(2)属性值定位

driver.find_element_by_xpath('//*[@xygsng="kw"]').send_keys("python")

(3)了解下复合定位就行:取用css的组合吧

driver.find_element_by_xpath('//*[@xygsng="kw" and @xydafn="mg"]').send_keys("python")

(4)右键copy full xpth【绝对路径】,实在没办法了再用这个,反正右键复制有时候不靠谱,坑啊坑

driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[5]/div[1]/div/form/span[1]/input').send_keys("python")

partial_link_text
类似于模糊查询,这个没啥说的,就是有的超链接文字太长了,用这个比较舒服
新闻

#coding=utf-8
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.find_element_by_link_text("新").click()

name定位

#coding=utf-8
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.find_element_by_name("wd").send_keys("python")

class定位
百度首页搜索框为例:

#coding=utf-8
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
**driver.find_element_by_class_name("s_ipt").send_keys("python")**

tag_name定位:
基本用不到,看下就行了,通过标签的名称定位,

#coding=utf-8
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
print(driver.find_element_by_tag_name('form').get_attribute('name'))

关于八大定位个人理解:
1、css定位id、name
2、xpath定位文本值
3、css组合定位
4、xpath绝对路径【不利用维护,容易出问题,烦人】

相关文章:

  • selenium_常用方法
  • selenium_其他方法
  • python与selenium_项目篇_项目实战、代码优化、项目重构
  • selenium+pytest自动化测试框架FAQ
  • python与selenium_项目篇_数据驱动测试
  • python与selenium_项目篇_page object设计模式(项目框架)
  • python与selenium_项目篇_行为驱动测试(BDD)
  • git相关(安装、配置、拉取提交代码)
  • python与selenium_平台篇_docker容器技术与多线程测试
  • python_类and对象
  • 记录我定位了2天的bug,坚持下去,问题终究会解决。
  • python_函数_参数(args、*args、**kwargs)
  • python与selenium_强制等待、隐性等待、显性等待
  • python_日志相关
  • jenkins总结1 - 安装、git、allure、email插件配置
  • 【mysql】环境安装、服务启动、密码设置
  • 10个最佳ES6特性 ES7与ES8的特性
  • 11111111
  • ES6核心特性
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • JavaScript中的对象个人分享
  • Java多态
  • Linux gpio口使用方法
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Lucene解析 - 基本概念
  • nodejs:开发并发布一个nodejs包
  • Spring框架之我见(三)——IOC、AOP
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • ubuntu 下nginx安装 并支持https协议
  • vue-router的history模式发布配置
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 聊一聊前端的监控
  • 日剧·日综资源集合(建议收藏)
  • 如何使用 JavaScript 解析 URL
  • 微服务入门【系列视频课程】
  • ​520就是要宠粉,你的心头书我买单
  • #if和#ifdef区别
  • #QT项目实战(天气预报)
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (2022 CVPR) Unbiased Teacher v2
  • (Note)C++中的继承方式
  • (二)PySpark3:SparkSQL编程
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)Google的Objective-C编码规范
  • (转载)Linux网络编程入门
  • . NET自动找可写目录
  • .libPaths()设置包加载目录
  • .NET Core 通过 Ef Core 操作 Mysql
  • .net FrameWork简介,数组,枚举
  • .Net 代码性能 - (1)