webdriver提供了豐富的API,有多種定位策略:id,name,css選擇器,xpath等,其中css選擇器定位元素效率相比xpath要高些,使用id,name屬性定位元素是最可靠,效率最高的一種辦法。
1、元素定位的方法:find_element() 與find_elements()
find_element() 該方法返回基於指定查詢條件的webElement對象,或拋出不符合條件的異常 eg:element = driver.find_element(By.ID,'u1')
ID:driver.findElement(By.ID,'elementID')
Name:driver.findElement(By.NAME,'elementName')
className:driver.findElement(By.CLASS_NAME,'elementClassName')
tagName:driver.findElement(By.TAG_NAME,'htmlTagName')
linkText:driver.findElement(By.LINK_TEXT,'linkText')
partialLinkText:driver.findElement(By.PARTIAL_LINK_TEXT,'partialLinkText')
css:driver.findElement(By.CSS_SELECTOR,'cssSelector')
xpath:driver.findElement(By.XPATH,'xpathQuery')
例如:url ='https://www.baidu.com/'
driver.find_element(By.ID,'u1')
driver.find_element(By.NAME,'tj_trnews')
driver.find_elements(By.CLASS_NAME,'mnav')
driver.find_element(By.ID,'u1').find_elements(By.TAG_NAME,'a')
driver.find_element(By.ID,'u1').find_element(By.LINK_TEXT,'新聞')
driver.find_element(By.ID,'u1').find_element(By.PARTIAL_LINK_TEXT,'聞')
driver.find_elements(By.CSS_SELECTOR,"a[name^='tj']") #匹配屬性值name以tj開頭的元素
driver.find_elements_by_xpath("//div[@id='u1']/a")
3、使用元素的任何屬性來定位元素
driver.find_element(By.CSS_SELECTOR("標簽名[屬性名='屬性值']"))
1、^= driver.find_element(By.CSS_SELECTOR("標簽名[屬性名^='xxx']")) 匹配屬性值以xxx開頭的元素
例如:driver.find_elements(By.CSS_SELECTOR,"a[name^='tj']") 匹配name值以tj開頭的a元素集合
適用於:driver.find_elements_by_css_selector("a[name^='tj']")
2、$= driver.find_element(By.CSS_SELECTOR("標簽名[屬性名$='xxx']")) 匹配屬性值以xxx結尾的元素
例如:driver.find_elements(By.CSS_SELECTOR,"a[name$='s']") 匹配name值以s結尾的a元素集合
適用於:driver.find_elements_by_css_selector("a[name$='s']")
3、*= driver.find_element(By.CSS_SELECTOR("標簽名[屬性名*='xxx']")) 匹配屬性值包含xxx的元素
例如:driver.find_elements(By.CSS_SELECTOR,"a[name*='tr']") 匹配name值包含tr的a元素集合
適用於:driver.find_elements_by_css_selector("a[name*='tj']")
如:driver.find_elements(By.XPATH,"//a[starts-with(@name,'tj')]")
適用於:driver.find_elements_by_xpath("//a[starts-with(@name,'tj')]")