• python+selenium元素定位——8种方法


    python+selenium元素定位——8种方法
    转发原链接:https://www.cnblogs.com/xiaobaibailongma/p/12032887.html

    定位元素,selenium提供了8中元素定位方法:

    (1)find_element_by_id() :html规定,id在html中必须是唯一的,有点类似于身份证号

    (2)find_element_by_name() :html规定,name用来指定元素的名称,有点类似于人名

    (3)find_element_by_tag_name() :通过元素的签名来定位

    (4)find_element_by_class_name() :html规定,class指定元素的类名

    (5)find_element_by_link_text() :专门用来定位文本链接

    (6)find_element_by_partial_link_text() :是对link_text的一种补充,有些文字链接比较长,可以取一部分链接文字进行定位,只要这部分文字是唯一标志这个链接的

    (7)find_element_by_css_selector()

    (8)find_element_by_xpath()

    =========================================================================================================

    http://www.baidu.com 首页html源代码

    输入框:

    确定按钮:

    上面一行链接:

    hao123

    新闻

    地图

    视频

    贴吧

    学术

    登录

    设置

    更多产品


    (1)id定位
    find_element_by_id('kw') :输入框
    find_element_by_id('su') :'百度搜索'按钮

    (2)name定位
    find_element_by_name('wd') :输入框

    (3)class_name定位
    find_element_by_class_name('s_ipt') :输入框

    (4)tag_name定位
    find_element_by_tag_name('input') :输入框

    (5)link_text定位
    find_element_by_link_text('新闻')
    find_element_by_link_text('地图')
    find_element_by_link_text('视频')
    find_element_by_link_text('贴吧')

    (6)partial_link_text定位
    find_element_by_partial_link_text('新')

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    (7)XPath定位
    (一)、绝对路径
    driver.find_element_by_xpath("/html/body/div[1]/div[1]/div/div[1]/div/form/span[1]/input").send_keys('中国')
    注意:我先找最后一个span的路径,再加上input的,直接在最后的input上面复制不了路径

    (二)、利用元素属性定位: 输入框:
    确定按钮:
    driver.find_element_by_xpath("//input[@id='kw']") 输入框
    driver.find_element_by_xpath("//input[@id='su']") 搜索确定按钮
    //input表示当前页面某个input标签;
    id='kw'表示这个元素的id值是kw;

    也可以通过name和class来定位:
    driver.find_element_by_xpath("//[@name='kw']") 输入框
    driver.find_element_by_xpath("//
    [@class='s_ipt']") 输入框

    如果不想指定标签名,也可以用*号代替,当然,XPath不局限于id、name、class这3个属性值,元素的任意属性都可以使用,只要其能标志唯一的一个元素;
    driver.find_element_by_xpath("//input[@maxlength='255']") 输入框
    driver.find_element_by_xpath("//input[@autocomplete='off']") 输入框
    driver.find_element_by_xpath("//input[@type='submit']") 搜索确定按钮

    (三)、层级与属性结合
    如果一个元素本身没有可以唯一标识这个元素的属性值,那么我们可以查找其上一级元素。如果上一级元素可以唯一标识,则可以拿来用。
    加上百度输入框没有可以利用的属性值,那么可以查找它的上一级属性:
    driver.find_element_by_xpath("//span[@class='bg s_ipt_wr quickdelete-wrap']/input").send_keys('中国') 输入框
    driver.find_element_by_xpath("//span[@class='bg s_btn_wr']/input").click() 搜索确定按钮
    注意:此种方法有问题注,使用该路径查询提示找不到(原因未知)

    如果父元素也没有利用价值,那么可以继续向上查找父元素的父元素:
    driver.find_element_by_xpath("//form[@id='form']/span[1]/input").send_keys('中国') 输入框
    driver.find_element_by_xpath("//form[@id='form']/span[2]/input").click() 搜索确定按钮

    (四)、使用逻辑运算符
    如果一个属性不能唯一确定一个元素,那么可以用逻辑运算符连接多个属性来查找:
    driver.find_element_by_xpath("//input[@id='kw' and @class='s_ipt']").send_keys('中国') 输入框
    driver.find_element_by_xpath("//input[@id='su' and @type='submit']").click() 搜索确定按钮

    (五)、使用contains方法
    contains方法用于匹配一个属性中包含的字符串:
    driver.find_element_by_xpath("//span[contains(@class,'s_ipt_wr')]/input").send_keys('中国') 输入框
    driver.find_element_by_xpath("//input[contains(@id,'su')]").click() 搜索确定按钮

    (六)、使用text()方法
    text()方法,用于匹配显示的文本信息,类似实现了link_text定位
    driver.find_element_by_xpath("//a[text(),'新闻']")
    driver.find_element_by_xpath("//a[contains(text(),'新闻')]") #两个配合使用
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    选择器 示例 示例说明
    .class .intro 选择所有class="intro"的元素

    id #firstname 选择所有id="firstname"的元素

      • 选择所有元素
        element p 选择所有

        元素
        element,element div,p 选择所有

        元素和

        元素
        element element div p 选择

        元素内的所有

        元素
        element>element div>p 选择所有父级是

        元素的

        元素
        element+element div+p 选择所有紧接着

        元素之后的

        元素
        [attribute] [target] 选择所有带有target属性元素
        [attribute=value] [target=-blank] 选择所有使用target="-blank"的元素

    (8)CSS定位
    (一)、通过class定位
    点( . )号表示通过class来定位元素
    driver.find_element_by_css_selector(".s_ipt").send_keys('中国') 输入框
    driver.find_element_by_css_selector(".bg.s_btn").click() 搜索确定按钮
    注:bg s_btn中间的空格用 . 代替
    注:class='bg s_ipt_wr quickdelete-wrap',类似这种叫复合class,由多个类选择器组成,
    定位的写法则是: .bg.s_ipt_wr.quickdelete-wrap,所有空格用.(点)代替

    (二)、通过id定位
    driver.find_element_by_css_selector("#kw").send_keys('中国') 输入框
    driver.find_element_by_css_selector("#su").click() 搜索确定按钮

    (三)、通过标签名定位
    在CSS中,用标签名定位元素时,不需要任何标识符号,直接使用标签名即可
    driver.find_element_by_css_selector("input[name=wd]").send_keys('中国') 输入框
    driver.find_element_by_css_selector("input[id=su]").click() 搜索确定按钮

    (四)、通过属性定位
    CSS中可以使用元素的任意属性定位,只要这些属性可以唯一标识这个元素;
    对属性值来说,可以加引号,也可以不加,但是要注意和整个字符的引号进行取费。
    driver.find_element_by_css_selector("[autocomplete=off]").send_keys('中国') 输入框
    driver.find_element_by_css_selector("[name='wd']").send_keys('中国') 输入框
    driver.find_element_by_css_selector('[type="submit"]').click() 搜索确定按钮

    (五)、通过标签层级关系定位
    driver.find_element_by_css_selector("span > input#kw").send_keys('中国')
    driver.find_element_by_css_selector('span > input#su').click()

    (六)、组合定位
    driver.find_element_by_css_selector("form.fm > span > input.s_ipt").send_keys('中国')
    driver.find_element_by_css_selector("form#form > span > input#kw").send_keys('中国')

    (七)、更多定位用法

    有时候我们定位不到元素可能的原因:
    1.检查搜索对象是否忘记打引号;
    2.Frame/Iframe原因定位不到元素;
    3.Xpath描述错误原因: 解决办法:编写好Xpath路径,chrome的F12->html,ctrl+F进行查找,看是否能查找到。
    4.页面还没有加载出来,就对页面上的元素进行的操作: 解决办法:导入time模块设置等待时间。
    5.动态id定位不到元素: 解决办法:如果是动态的id,最好不要使用,转而使用xpath或其它方式定位
    6.二次定位,如弹出框登录: 解决办法:先定位到弹出框,再定位到弹出框内的元素。
    7.不可见元素定位:
    [emoji:00a0] [emoji:00a0] [emoji:00a0]如上百度登录代码,通过名称为tj_login查找的登录元素,有些是不可见的,
    所以加一个循环判断,找到可见元素(is_displayed())点击登录即可。
    8.浏览器兼容问题,比如SPACE空格操作Firefox就识别不了,而Chrome就能够识别做出响应。
    9.页面刷新或者后退后找不到元素
    页面刷新或者后退后,不能直接采用之前定位的元素进行操作,需要重新定位再进行操作。

  • 相关阅读:
    Apache Commons Fileupload 反序列化漏洞分析
    Linux下安装python3.6
    使用salt-stack指定IP添加系统用户为root的权限
    virt-install创建虚拟机并制作成模板
    virsh console 登录CentOS7系统
    Cobbler本机使用VM装机配置方法
    Cobbler自动化部署
    调用python脚本报错/usr/bin/env: python : No such file or directory
    启动keepalived报错(VI_1): received an invalid passwd!
    rsync+sersync实现数据实时同步
  • 原文地址:https://www.cnblogs.com/hl-2030/p/13080430.html
Copyright © 2020-2023  润新知