博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Selenium3+Python3_02:元素定位
阅读量:4984 次
发布时间:2019-06-12

本文共 2999 字,大约阅读时间需要 9 分钟。

1.通过id定位

element = driver.find_element_by_id("id")

2.通过name定位

element = driver.find_element_by_name("name")

3.通过class name定位

element = driver.find_element_by_class_name("class name") 

注意:class中间有空格,多重属性,只取其中一个值

4.通过tag name定位

element = driver.find_element_by_tag_name("tag name")

5.通过link定位

element = driver.find_element_by_link_text("link text")

6.通过partial link定位

element = driver.find_element_by_partial_link_text("partial link text")

7.通过xpath定位  

element = driver.find_element_by_xpath()   , 如:element = driver.find_element_by_xpath(".//*[@id=’ab’]/a[1]")

具体xpath定位方法如下:

1)通过id,id前使用符号@

element = driver.find_element_by_xpath("//input[@id='kw']")

2)通过name,name前使用符号@

element = driver.find_element_by_xpath("//*[@name='wd']")

3)通过class,class前使用符号@,(注意:区别于通过class name定位时,只取class的一个值;此处需要将class的值都复制过来)

element = driver.find_element_by_xpath("//*[@class='bg s_btn']")

4)通过文本属性定位text(),不需要加@,直接text()=...

element = driver.find_element_by_xpath("//*[text()='新闻']")

5)通过模糊文本定位text(),不需要加@

element = driver.find_element_by_xpath("//a[contains(text(),'糯')]").click()

[contains(@id, 'xxx')]

6)通过其他属性,如type,加@

element = driver.find_element_by_xpath("//*[@type='xxxxxx']")

7)通过子节点定位父节点,两个点,表示查找上一级

element = driver.find_element_by_xpath("//*[@name=’tj_trnews’]/../..")

注意点:

1)python索引都是从0开始,但如果是xpath定位,索引从1开始

2)".//*[@id=’ab’]/a[1]"详解:. 表示从当前节点开始查找,可有可无; // 表示相对路径; * 表示匹配任意标签,也可写成具体的标签

3)多个属性的时候,标签是必须的,[]里边的内容不是必须的

4)如果id属性是动态的,忽略它,用其他属性定位

8.通过css定位

element = driver.find_element_by_css_selector()

注意:#id的名字  ||  .class的名字  ||  标签前边不加任何内容  ||  其他属性,写作[name=‘xxx’]

1)通过id,id的值前加#

element = driver.find_element_by_css_selector("#kw")

2)通过class,class的值前加 .

element = driver.find_element_by_css_selector(".form-control")

3)通过标签,前后没有任何符号

element = driver.find_element_by_css_selector("input")

注意:如果是指定标签的,需要在 # 或 . 前加标签名,如element = driver.find_element_by_css_selector("input#kw")

4)其他属性,直接以此格式书写  [name=‘xxx’]

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

其他:

a)  > 大于号代表层级关系,例如:table.table.table-form>tbody>tr>td>input#account

语法:标签名.class多重属性(多重属性中间的空格都改成 .  )>下一级标签

b)  tbody>tr:nth-child(1)    tr有多个,获取第一个

c)  css定位,不支持contains(‘xxxx’)

 

另外,还有8种复数定位,即上述的element, 写作复数elements,如:element = driver.find_elements_by_class_name("ab")[1]

复数定位返回的是list,索引从0开始

 

还有一种通过By.id形式定位的方法,参考如下:

from selenium.webdriver.common.by import By

element = driver.find_element(By.ID, value='kw')

cheese = driver.find_element(By.NAME, "cheese")

cheeses = driver.find_elements(By.CLASS_NAME, "cheese")

cheese = driver.find_element(By.NAME, "cheese")

cheese = driver.find_element(By.LINK_TEXT, "cheese")

cheese = driver.find_element(By.PARTIAL_LINK_TEXT, "cheese")

inputs = driver.find_elements(By.XPATH, "//input")

cheese = driver.find_element(By.CSS_SELECTOR, "#food span.dairy.aged")

 

以下对应关系,后续定位会用到

ID = "id"

NAME = "name"
CLASS_NAME = "class name"
TAG_NAME = "tag name"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
XPATH = "xpath"
CSS_SELECTOR = "css selector"

 

转载于:https://www.cnblogs.com/elaine888/p/10395496.html

你可能感兴趣的文章
LightOJ 1338 && 1387 - Setu && LightOJ 1433 && CodeForces 246B(水题)
查看>>
yii2 实战教程之如何安装
查看>>
Spring整合Hibernate与Struts
查看>>
ORA-02041: client database did not begin a transaction
查看>>
判断浏览器JS
查看>>
U33405 纽约
查看>>
method_missing in JavaScript
查看>>
Leetcode 904. Fruit Into Baskets
查看>>
第三百九十天 how can I 坚持
查看>>
NGUI插件的一个扩展---NGUI_HUD_Text
查看>>
urllib2模块使用
查看>>
怎样连接REDIS服务端
查看>>
餐饮平台报表图片
查看>>
Windows server 2008搭建php运行环境
查看>>
scala基础
查看>>
【转载】前后端分离的思考与实践(三)
查看>>
浅析rune数据类型
查看>>
76.数塔问题
查看>>
2016.10.30 NOIP模拟赛 day2 AM 整理
查看>>
算法设计10-红黑搜索树
查看>>