1.两类方法比较
第一类:
ele1 = driver.find_element_by_xxx("")
ele2 = driver.find_elements_by_xxx("")
第二类:
from selenium.webdriver.common.by import By
ele3 = driver.find_element(By.xxx,"")
ele4 = driver.find_elements(By.xxx,"")
xxx代表定位属性的八种方法,下文会具体说明
ele1、ele3对应的方法总结如下:(这类方法中的8种方法都具有如下特点)
①返回的是WebElement类;
②一次只会定位到一个元素,如果有多个元素,则会返回第一个元素;
③如果使用元素定位表达式定位不到任何元素,则会在代码执行过程中抛出异常:NoSuchElemenetExcept
ele2、ele4对应的方法总结如下:(这类方法中的8种方法都具有如下特点
①返回的是一个列表
②如果某个元素定位表达式匹配到了多个元素,则列表种存放的就是定位到的多个元素
③如果匹配不到,则返回 一个空列表,因此如果需要操作的话需要加上索引来指定需要操作的那个元素。
ele2 = driver.find_elements_by_xxx("")[0].click()
ele4 = driver.find_elements(By.xxx,"")[1].click()
2.第一类方法
2.1 id
通过标签中的id属性的值来定位元素,需要标签中又id属性
driver.find_element_by_id("IamID")
driver.find_elements_by_id("IamID")
2.2 name
通过标签中的name属性的值来定位元素,需要标签中有name属性
driver.find_element_by_name("second")
driver.find_elements_by_name("second")
2.3 class_name
通过标签中的class name属性的值来定位元素。如果class属性值有空格(本质:这个class属性的值是由多个class属性的值组成),截取部分属性值来定位元素(本质:表示获取到其中的一个class属性的值来定位元素)
eles = driver.find_element_by_class_name("Dream")
eles = driver.find_elements_by_class_name("Dream")
2.4 tag_name
通过标签中标签名来定位元素。
driver.find_element_by_tag_name("input")
driver.find_elements_by_tag_name("input")
2.5 link_text
通过超链接标签中的全部文本内容来定位元素(只适用于 a 标签)。
driver.find_element_by_link_text("全部文本")
driver.find_elements_by_link_text("全部文本")
2.6 partial_link_text
通过超链接标签中的全部文本内容来定位元素(只适用于 a 标签)。
driver.find_element_by_partial_link_text("部分文本")
driver.find_elements_by_partial_link_text("部分文本")
2.7 css_selector
根据css选择器来定位元素,简单用法,通过页面复制
driver.find_element_by_css_selector('#ID')
driver.find_elements_by_css_selector('#ID')
2.8 xpath
根据xpath表达式来定位元素,简单用法,通过页面复制
driver.find_element_by_xpath('//*[@id="ID"]')
driver.find_elements_by_xpath('//*[@id="ID"]')
3.1 第二类方法
第二类方法与第一种方法类似,只是在在语法格式上有区别,并且第二类方法需要额外导入:
from selenium.webdriver.common.by import By
driver.find_elements_by_xpath('//*[@id="ID"]')
driver.find_elements(By,XPATH,'//*[@id="ID"]')
4 总结
①id、name
定位元素比较简单,但是很多元素没有ID和NAME属性
②class_name
大部分元素都有class属性,但是网页中经常会有多个元素拥有相同的标签名
①id、name
定位元素比较简单,但是很多元素没有ID和NAME属性
②class_name
大部分元素都有class属性,但是网页中经常会有多个元素拥有相同的标签名
③tag_naem
通过标签名来定位,类似于class属性,每个元素都有标签名,但是网页中经常会有多个元素拥有相同的标签名;比如一个网页有100个链接可能都是<a>标签,所以他们标签名相同,也是只能定位第一个
例:driver.findElement(By.TAG_NAME,’a’)
④link_text、partial_link_text
只适用于<a>标签或者<a>标签的子元素的文本,不适用于所有的元素。
⑤css_selector、xpath
这两种方式几乎可以定位所有的元素