web页面的元素定位方式共有8种:css
一、id定位 使用 find_element_by_id() 方法web
二、name定位 使用 find_element_by_name() 方法spa
三、class定位 使用 find_element_by_class_name() 方法code
四、tag定位 使用 find_element_by_tag_name() 方法orm
HTML自己就是经过tag来定义实现不一样的功能,如<div>,<input>,<a>等就是tag,因此很难经过标tag name 去区分不一样的元素blog
五、link定位 使用 find_element_by_link_text() 方法ip
link定位专门用来定位超连接,文本连接element
六、partial link 定位 使用 find_element_by_partial_link() 方法input
partial link 定位是对link定位的一种补充,有些文本连接比较长,咱们能够取文本连接的一部分定位,只要这一部分信息能够惟一的标识这个连接selenium
如:“这是一个很长很长的文本连接” 定位的时候能够这样写:find_element_by_partial_link(“这是一个很长”)
七、XPath 定位 find_element_by_xpath() 方法
7.1 绝对路径定位
绝对路径定位的方法不经常使用,路径太长
7.2 利用元素属性定位
1 driver.find_element_by_xpath('//input[@id="kw"]')
//表示当前页面某个目录下,input表示定位元素的标签名,[@id = 'kw']表示这个元素的id属性值等于kw
若是不想指定标签名,也可使用星号(*)代替,元素的任意属性值均可以使用,只要它能惟一标识这个元素便可
1 driver.find_element_by_xpath("//*[autocomplete='off']")
7.3 层级与属性结合
若是一个元素自己没有能够惟一标识这个元素的属性值,那么能够找其上一级元素,知道有能够惟一标识的属性值便可
1 driver.find_element_by_xpath("//span[class=soutu-btn]/input")
7.4 使用逻辑运算符
若是一个属性没法惟一一个元素,那么能够考虑使用逻辑运算付链接多个属性来查找元素
1 driver.find_element_by_xpath("//input[@id='kw' and @name='wd']")
八、css 定位 使用方法:find_element_by_css_selector()
css能够较为灵活的选择控件的任意属性,定位速度比xpath快
8.1经过class属性定位,用(.)号表示:
1 driver.find_element_by_css_selector(".s_ipt")
8.2经过id属性定位,用(#)号表示:
1 driver.find_element_by_css_selector("#kw")
8.3经过标签名定位:
1 driver.find_element_by_css_selector("input") 2 #经过父子关系定位 3 driver.find_element_by_css_selector("span>input") 4 #经过属性定位 5 driver.find_element_by_css_selector("[name='kw']") 6 #组合定位 7 driver.find_element_by_css_selector("form.fm>span>input.s_ipt")
九、用By定位元素
针对前面八种定位方法,webdriver还提供了另一种写法,即统一调用 find_element( ) 方法,经过By来声明定位的方法,而且传入对应定位方法的定位参数
在使用By定位元素的时候,首先须要到时By类
1 from selenium.webdriver.common.by import By
1 driver.find_element(By.ID,"kw") 2 driver.find_element(By.NAME,"wd") 3 driver.find_element(By.CLASS_NAME,"s_ipt") 4 driver.find_element(By.TAG_NAME,"input") 5 driver.find_element(By.LINK_TEXT,"新闻") 6 driver.find_element(By.PARTIAL_LINK_TEXT,"新") 7 driver.find_element(By.XPATH,"//input[@id='kw']") 8 driver.find_element(By.CSS_SELECTOR,"span.bg s_btn_wr>input#su")