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"