千纸鹤

  博客园  ::  :: 新随笔  ::  ::  :: 管理
  5 随笔 :: 70 文章 :: 0 评论 :: 9301 阅读
《一》八种元素定位法则
(1)id
a.基于标签的id属性来进行定位的,类似于身份证号码基本不会重复,为了避免出现重复最好提前校验
b.通过id来进行元素的定位
el = driver.find_element_by_id('kw') print(type(el))
(2)name
a.类似于身份证上的名字,比较特别容易出现重名
b.通过name来进行元素定位
el = driver.find_element_by_name('wd') print(type(el))
(3)link text
a.用于定位超链接(a标签),通过a标签的文本来进行定位
b.通过link text进行元素定位
el = driver.find_element_by_link_text('新闻') el.click()
(4)partial link text
a.用于定位a标签,通过模糊查找的形式来实现定位,类似于mysql中的like关键字,一般partial定位偶尔出现多元素的结果,一般可以通过find elements来进行定位
b.通过partial link text进行元素定位
1. 不加s进行的定位,默认返回查找到的第一个元素
el = driver.find_element_by_partial_link_text('百度') print(el.text)
2. 加s进行定位,基于下标的选择来返回元素
el = driver.find_elements_by_partial_link_text('百度')
for el in els:
print(el.text)
(5)tagname
a.基于标签名(都是基于复数的s)来进行定位,一般而言不推荐,只有在特殊情况下需要用到
b.通过tagname进行元素定位
els = driver.find_elements_by_tag_name('a')
for el in els:
print(el.text)
(6)classname
a.通过标签的class属性定位,不推荐使用的元素定位方法
b.通过classname进行元素定位
driver.find_element_by_class_name()
(7)cssselector
a.定位界的万金油之一,专治IE浏览器下的元素定位疑难杂症,可以通过右键copy的形式来定位
b.通过cssselector进行元素定位
driver.find_element_by_css_selector('#kw')
(8)xpath
a.定位界的万金油之二,是基于树状结构来进行定位的,类似于文件机制
b.定位路径
1.绝对路径
/html/body/div/div[2]/div[5]/div[1]/div/form/span[1]/input:绝对路径下的下标是从1开始的,实在定位不到元素的时候,也不推荐使用。
2.相对路径
有相对路径的语法来实现便捷的定位手段
示例
//input[@id="kw"] 从根路径下查找id为kw的input标签
//*[@id="kw"]
//*[text()="新闻"]
剖析:基本语法规则
//:从根路径下开始查找,从html标签开始
input:查找input的元素标签名称,若是*表示查找全部元素标签名称
[ ] :添加筛选条件,可以单条件,也可以通过and进行多条件关联
@ :表示属性(Attribute)
text(): 固定写法,专属于通过text文本来查找元素的筛选条件,text内容完全符合一致才可以
c.查找方法多样化
1.xpath中包含有非常多的元素定位方法,但是,基本上常用的就是一种,相对路径以及父级找子集是最常用的
2.示例
绝对和相对的结合://form[@name="f"]/input[5]
定位到父级(很少用)://input[@type='"hidden"]/..
d.查找元素模式:自上而下进行查找
e.常用函数
1.contains:通过模糊查找的行为,查找元素。可以通过属性或者文本作为查找条件
2.通过属性查找元素
//[contains(@id,"k")] input标签://input[contains(@id,"k")]
3.通过文本查找元素
//[contains(text(),"新")] a标签://a[contains(text(),"新")]
4.通过多条件查找元素
//input[@id="kw" and contains(text(),"新")]
《二》伪元素
a.一般常见于下拉列表框(有些特定数据是在调用页面的时候才会进行接口通信生成的)
b.遇到伪元素的时候,通过cssselector定位即可
c.格式:[ ::defore:: ::after:: ]

《三》selenium 4.0 相对定位器(用于定位附近的其他元素)

  from time import sleep
  from selenium import webdriver
  from selenium.webdriver.common.by import By
  from selenium.webdriver.support.relative_locator import locate_with

  driver = webdriver.Chrome()

  driver.get('http://www.baidu.com')
  (1)定位输入框
  el = driver.find_element('xpath', '//input[@id="kw"]')
  el.send_keys('虚竹')
  (2)右侧
  search = driver.find_element(locate_with(By.TAG_NAME, 'input').to_right_of(el))
  search.click()
  (3)左侧
  search = driver.find_element(locate_with(By.TAG_NAME, 'input').to_left_of(el))
  search.click()
  (4)上方
  img = driver.find_element(locate_with(By.TAG_NAME, 'img').above(el))
  print(img)
  (5)下方
  div = driver.find_element(locate_with(By.TAG_NAME, 'div').below(el))
  print(div)
  (6)靠近
  span = driver.find_element(locate_with(By.TAG_NAME, 'span').near(el))
  print(span)
posted on   隆江猪脚饭  阅读(81)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示