美文网首页
WebDriver定位元素方法

WebDriver定位元素方法

作者: ccq_inori | 来源:发表于2017-11-26 20:55 被阅读0次

    上一次爬取网易云的个人专辑图片,这次来介绍WebDriver定位元素的方法。
    在社会上,我们要找一个人,首先要确定他身上的属性,比如:身份证,电话号码,性别,居住城市,家乡之类的。而网页也类似如何,由很多种元素来构成,然后交给浏览器进行解析,最后展示的是一个简洁的页面。

    WebDriver提供多种元素定位方法,下面用Python语言来介绍这些元素定位:
    1、id定位
    id属性在HTML文档中必须是唯一的。WebDriver提供id的定位方法就是通过id属性来寻找


    搜狗截图17年11月25日2018_1.png

    通过find_element_by_id(id的名称) 如:
    find_element_by_id("kw") 百度输入框
    find_element_by_id("su") 百度搜索

    2、name定位
    HTML规定name来指定元素的名称,通过name来定位百度输入框
    find_element_by_name(填写name属性的值)
    如百度输入框:find_element_by_name("wd")

    3、class定位
    HTML规定clss来指定元素的类名。其用法与id、name类似,如通过class属性定位百度输入框和搜索按钮:
    find_element_by_class_name("s_ipt")
    find_element_by_class_name("s_btn")
    即find_element_by_class_name()方法通过class属性来定位元素。

    4、tag定位
    HTML的本质就是通过tag来定义实现不同的功能,HTML是由tag来构成的,所以往往运用tag来定位的话,都是定位一类功能,比如下拉框,单选框或者常用的输入框。如通过tag name定位百度的输入框
    find_element_by_tag_name("input")
    即find_element_by_tag_name()方法通过元素的tag name来定位元素。

    5、link定位(一般用于a标签里面的文本元素)
    find_element_by_link_text("新闻")

    find_element_by_link_text("hao123")

    find_element_by_link_text("地图")

    find_element_by_link_text("视频")

    find_element_by_link_text("贴吧")

    find_element_by_link_text()方法通过元素标签对之间的文本信息来定位元素。
    7、Xpath定位
    Xpath是一种在XML文档中定位元素的语言。因为HTML可以看作XML的一种实现,所以可以使用这种强大的语言在web应用中定位元素。相当于绝对路径,一般都是唯一的。
    find_element_by_xpath("html/body/div/div/div/div/div/form/span/input") 百度输入框
    find_element_by_xpath("html/body/div/div/div/div/div/form/span[2]/input")百度搜索


    搜狗截图17年11月25日2030_2.png

    Xpath主要用标签名的层级关系来定位元素的绝对路径,最外层为html语言。在body文本内,一级一级往下查找,如果一个层级下有多个相同的标签名,那个就按上下顺序确定是第几个
    图上的方法,比较容易寻找到元素的Xpath
    利用元素属性定位

    除了使用绝对路径外,Xpath也可以使用元素的属性来定位。同样以百度输入框和搜索按钮为例:

    find_element_by_xpath("//input[@id='kw']")

    find_element_by_xpath("//input[@id='su']")

    //表示当前页面某个目录下,input表示定位元素的标签名,[@id='kw']表示这个元素的id属性值等于kw。下面通过name和class属性值来定位:

    find_element_by_xpath("//input[@name='wd']")

    find_element_by_xpath("//input[@class='s_ipt']")

    find_element_by_xpath("//*[@class='s_btn']")

    如果不想指定标签名,可以用星号(*)代替。当然,使用Xpath不局限于id、name、class三个属性值,元素的任意属性值都可以使用,只要它能唯一的标识一个元素。

    find_element_by_xpath("//input[@maxlength='100']")

    find_element_by_xpath("//input[@value='']")

    find_element_by_xpath("//input[@type='snbmit']")

    层级与属性结合

    如果一个元素本身没有可以唯一标识这个元素的属性值,那么可以找其上一级元素,如果它的上一级元素有可以唯一标识属性的值,也可使用。

    假如百度输入框本身没有可以利用的属性值,那么可以查找它的上一级属性,如下:

    find_element_by_xpath("//span[@class='s_ipt_wr']/input")

    span[@class='bg s_ipt_wr']通过class属性定位父元素,后面/input就表示父元素下面的子元素。如果父元素没有可利用的属性值,那么可以继续向上查找“爷爷”元素。

    find_element_by_xpath("//form[@id='form']/span/input")

    find_element_by_xpath("//form[@id='form']/span[2]/input") #百度搜索按钮

    可以通过这种方法一级一级地向上查找,直到最外层的<html>标签,也是一个绝对路径的写法了。

    使用逻辑运算符

    如果一个属性不能唯一地区分一个元素,我们还可以使用逻辑运算符连接多个属性来查找元素。如同时使用id和class来唯一标识百度输入框,通过逻辑运算符“and”来连接两个条件。如下:

    find_element_by_xpath("//input[@id='kw' and @class='s_ipt']/span/input")

    当然可以用“and”连接更多的属性来唯一地标识一个元素。

    相关文章

      网友评论

          本文标题:WebDriver定位元素方法

          本文链接:https://www.haomeiwen.com/subject/acmtbxtx.html