• selenium+python自动化,元素定位


    webdriver 提供了八种元素定位方法:
    •  id

    •  name

    •  class name

    •  tag name

    •  link text

    •  partial link text

    •  xpath

    •  css selector

    • Python 语言中对应的定位方法如下:

    • find_element_by_id()

    • find_element_by_name()

    • find_element_by_class_name()

    • find_element_by_tag_name()

    • find_element_by_link_text()

    • find_element_by_partial_link_text()

    • find_element_by_xpath()

    • find_element_by_css_selector()

    1.使用xpath定位:

    1)绝对路径:

    find_element_by_xpath()方法用于 XPath 语言定位元素。XPath 的绝对路径主要用标签名的层级关系来 定位元素的绝对路径。最外层为 html 语言,body 文本内,一级一级往下查找,如果一个层级下有多个相 同的标签名,那么就按上下顺序确定是第几个,div[2]表示第二个 div 标签。

     例:find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span/input")

    2)利用元素属性定位

    //表示当前页面某个目录下,input 表示定位元素的标签名,[@id='kw'] 表示这个元素的 id 属性值等于 kw
    如果不想指定标签名也可以用星号(*)代替。当然,使用 XPath 不仅仅只局限在 idname class 这 三个属性值,元素的任意属性值都可以使用,只要它能唯一的标识一个元素。

    例:

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

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

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

     3)层级与属性结合:

    例:browser.find_element_by_xpath("//*[@id='main']/div[1]/ul/li[2]/a").click()

    4)使用逻辑运算符:

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

    2.css定位:

    1)通过class属性定位:

    find_element_by_css_selector()方法用于 CSS 语言定位元素,点号(.)表示通过 class 属性来定位元素。

    如:browser.find_element_by_css_selector(".right_more")

    2)通过 id 属性定位:

    井号(#)表示通过 id 属性来定位元素。

    例:find_element_by_css_selector("#kw")

    3)通过标签名定位:

    CSS 语言中用标签名定位元素不需要任何符号标识,直接使用标签名即可,但我们前面已经了解到 标签名重复的概率非常大,所以通过这种方式很难唯一的标识一个元素。

     4)通过父子关系定位:

    find_element_by_css_selector("span>input")
    5)通过属性定位:

    find_element_by_css_selector("input[autocomplete='off']")

    find_element_by_css_selector("input[maxlength='100']")

    find_element_by_css_selector("input[type='submit']")

    CSS 当中也可以使用元素的任意属性,只要这些属性可以唯一的标识这个元素。

    6)组合定位:

    find_element_by_css_selector("span.bg s_ipt_wr>input.s_ipt")

    find_element_by_css_selector("span.bg s_btn_wr>input#su")

    有一个父元素,它的标签名叫 span,它有一个 class 属性值叫 bg s_ipt_wr,它有一个子元素,标签名 叫 input,并且这个子元素的 class 属性值叫 s_ipt

    3.用 By 定位元素

    find_element()方法只用于定位元素。它需要两个参数,第一个参数是定位方式,这个由 By 提供;另 第二个参数是定位的值。在使用 By 时需要将 By 类导入。

    from selenium.webdriver.common.by import By
    例:
    find_element(By.ID,"kw")

    find_element(By.NAME,"wd")

    find_element(By.CLASS_NAME,"s_ipt")

    find_element(By.TAG_NAME,"input")

    find_element(By.LINK_TEXT,u"新闻")

    find_element(By.PARTIAL_LINK_TEXT,u"")

    find_element(By.XPATH,"//*[@class='bg s_btn']")

    find_element(By.CSS_SELECTOR,"span.bg s_btn_wr>input#su")   

    4.定位一组对象

    定位一组对象的方法与定位单个对象的方法类似,唯一的区别是在单词 element 后面多了一个 s 表示 复数。定位一组对象一般用于以下场景:

    1)批量操作对象,比如将页面上所有的复选框都被勾选。

    2)先获取一组对象,再在这组对象中过滤出需要具体定位的一些对象。比如定位出页面上所有的checkbox,然后选择最后一个。
    例:
    checkboxs=driver.find_elements_by_xpath("//input[@type='checkbox']")
    for checkbox in checkboxs:
    checkbox.click()
    pop() 函数用于获取列表中的一个元素(默认为最后一个元素),并且返回该元素 的值。

    driver.find_elements_by_css_selector('input[type=checkbox]').pop().click()

    pop()pop(-1)默认获取一组元素中的最后一个
    pop(0) 默认获取一组元素中的第一个
    pop(1)
     
     
     
  • 相关阅读:
    Opencv:视频中人脸检测并保存人脸图片
    Opencv:图片中检测人脸并保存
    Opencv:按帧数读取视频并保存图片
    《软件工程》学习进度博客9
    第一阶段冲刺4
    02构建之法阅读笔记2—到底几个人开发?
    第一阶段冲刺3
    第一阶段冲刺2
    第一阶段冲刺1
    《软件工程》结对作业2----顶会热词统计
  • 原文地址:https://www.cnblogs.com/zoeya/p/6548949.html
Copyright © 2020-2023  润新知