webdriver中html节点的查找、定位

来源:互联网 发布:下列属于视频压缩算法 编辑:程序博客网 时间:2024/05/16 03:12
from selenium import  webdriverfrom selenium.webdriver.common.action_chains import ActionChainsimport os, timefile_name = "file://" + os.path.abspath("find_elements.html")driver = webdriver.Firefox()driver.get(file_name)print("根据ID查找元素")msg = driver.find_element_by_id("divHello").textprint("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").textprint("find_element_by_name, msg =", msg)msg = driver.find_element_by_name("divByName2").textprint("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("快速购买").textprint("find_element_by_link_text, msg =", msg)msg = driver.find_element_by_partial_link_text("速购").textprint("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>
 
阅读全文
0 0
原创粉丝点击