from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains import os, time file_name = "file://" + os.path.abspath("find_elements.html") driver = webdriver.Firefox() driver.get(file_name) print("根据ID查找元素") msg = driver.find_element_by_id("divHello").text print("find_element_by_id, msg =", msg) # 多个相同的id是不好的设计。 print("根据ID查找元素 -- id相同") ids = driver.find_elements_by_id("multiDiv1") for id in ids: print("find_elements_by_id, test =", id.text) print("根据名称查找name") msg = driver.find_element_by_name("divByName").text print("find_element_by_name, msg =", msg) msg = driver.find_element_by_name("divByName2").text print("find_element_by_name, 嵌套 msg =", msg) print("根据class获取界面上的元素") ids = driver.find_elements_by_class_name("span3") for id in ids: print("find_elements_by_class_name, level =", id.get_attribute("level")) print("根据html标签的文字查找") msg = driver.find_element_by_link_text("快速购买").text print("find_element_by_link_text, msg =", msg) msg = driver.find_element_by_partial_link_text("速购").text print("find_element_by_partial_link_text, msg =", msg) print("根据xpath选择标签") # xpath 基本路径表达法 # nodename 选取此节点的所有子节点。 #/ 从根节点选取。 #// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 #. 选取当前节点。 #.. 选取当前节点的父节点。 #@ 选取属性。 divChild = driver.find_element_by_id("dropDown") print("find_element_by_id, class for dropDown =", divChild.get_attribute("class")) divs = driver.find_elements_by_xpath("/html/body/div") print("选取根节点下全部的div") for div in divs: print("body下全部div的子节点, Level =", div.get_attribute("level")) divs = driver.find_elements_by_xpath("/div") if divs.__len__() == 0: print("/节点下的div没有找到") for div in divs: print("body下全部div的子节点(包括孙子级别的)Level, level =", div.get_attribute("level")) print("") print("根节点的确认") print("根节点下的div") divs = driver.find_elements_by_xpath("div") if divs.__len__() == 0: print("根节点下没有div节点。") divs = driver.find_elements_by_xpath("html") if divs.__len__() != 0: print("根节点下有html节点") print("从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置") divs = driver.find_elements_by_xpath("//div") if divs.__len__() == 0: print("webdriver默认的根节点是什么?") for div in divs: print("body下全部div的子节点(不管层级的)Level =", div.get_attribute("level")) print() print("找到dropDown的节点,通过divChild找到其他节点") divChild = driver.find_element_by_id("dropDown") # 找到dropDown的节点. divs = divChild.find_elements_by_xpath("/html/body/div") # 从跟节点开始找。 for div in divs: print("body下全部div的子节点, Level =", div.get_attribute("level")) id = divChild.find_element_by_xpath("..") print("divChild的父节点, desc =", id.get_attribute("desc")) print("") print("通过divChild找到body下面的第一个div节点。") id = divChild.find_element_by_xpath("../../../div[1]") # 第一个子节点只可以使用1,不能使用first() print("body的第一个子节点 div level =", id.get_attribute("level")) id = divChild.find_element_by_xpath("../../../div[last()]") print("body的最后一个子节点 div level =", id.get_attribute("level")) print("body的前四个div节点:") ids = divChild.find_elements_by_xpath("../../../div[position()<=4]") for div in ids: print("前四个节点, Level =", div.get_attribute("level")) #* 匹配任何元素节点。 #@* 匹配任何属性节点。 #node() 匹配任何类型的节点。 print() print("head节点下的所有子节点") ids = driver.find_elements_by_xpath("/html/head/*") for id in ids: print("任意节点, tag_name =", id.tag_name) print("有tabindex的全部节点。") ids = driver.find_elements_by_xpath("//*[@tabindex]") for id in ids: print("tabindex, tag_name =", id.tag_name, " =", id.text) print("通过|同事选取多个节点。") ids = driver.find_elements_by_xpath("/html/head/* | //div[@class='dropdown']/*[position()>1]") #ids = driver.find_elements_by_xpath("//div[@class='dropdown']/*[1]") for id in ids: print("任意节点, tag_name =", id.tag_name, ", 属性role =", id.get_attribute("role")) driver.quit()
********后面是使用到的html文件********
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <title>层级定位</title> </head> <body> <h3>Level locate</h3> <div class="span3" level="first"> <div class="well"> <div class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">Link1</a> <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel" id="dropdown1"> <li><a tabindex="-1" href="#">Action</a></li> <li><a tabindex="-1" href="#">Another action</a></li> <li><a tabindex="-1" href="#">Something else here</a></li> <li class="divider"></li> <li><a tabindex="-1" href="#">Separated link</a></li> </ul> </div> </div> </div> <div class="span3" level="second"> <div class="well" desc="dropDwon的父节点"> <div class="dropdown" id="dropDown" level="second的孙子。。。"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">Link2</a> <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> <li><a tabindex="-1" href="#">Action</a></li> <li><a tabindex="-1" href="#">Another action</a></li> <li><a tabindex="-1" href="#">Something else here</a></li> <li class="divider"></li> <li><a tabindex="-1" href="#">Separated link</a></li> </ul> </div> </div> </div> <div id="divHello">你好!</div> <div id="multiDiv1">multiDiv1</div> <div id="multiDiv1">multiDiv2</div> <div id="multiDiv1">multiDiv3</div> <div name="divByName">根据名称查找</div> <div><div name="divByName2">by name, 嵌套在其他元素里面。</div></div> <div level="ninth"><div><a href="">快速购买</a> </div></div> <span level="900000"></span> </body> </html>