• Selenium3+python3自动化(四十七)--定位的坑:class属性有空格


    前言

    有些class属性中间有空格,如果直接复制过来定位是回报错的:no such element: Unable to locate element,即:没有这样的元素:找不到元素

    一、定位带空格的class属性

    1.以百度首页,定位新闻按钮为例:https://www.baidu.com

     2.如果直接复制class属性定位,是会报错的

     二、class属性科普

    1.class属性中间的空格并不是空字符串,那是间隔符号,表示的是一个元素多个class的属性名称(class属性是比较特殊的一个,除了这个有多个属性外,其它的像name,id是没有多个属性的)

    2.了解更多html知识,参考:https://www.runoob.com/html/html-attributes.html

     三、class定位

    1.既然知道class属性有空格是多个属性了,那定位的时候取其中的一个就行(并且要唯一),也就是说class="mnav c-font-normal c-color-t",取mnav 或c-font-normal 或c-color-t都可以,只要这个class属性在页面上唯一就行。

    2.那么问题来了:如何才知道这个元素的某个属性是不是在页面上是唯一的呢?

    四、判断元素唯一性

    1.F12调出的窗口中,Ctrl+F搜索关键字:如mnav,然后回车键搜索,看页面上有几个class属性中有mnav这个属性的,就知道是不是唯一的了。

     五、class属性不唯一怎么办?

    1.如果这个class的多个属性都不是唯一的咋办呢,元素不唯一也不用怕,可以用复数定位,把所有的相同元素定位出来,按下标取第几个就行。

    # coding:utf-8
    from selenium import webdriver
    import time
    driver=webdriver.Chrome()
    driver.get("https://www.baidu.com")
    time.sleep(3)
    # t=driver.find_element_by_class_name("mnav c-font-normal c-color-t").click()
    t=driver.find_elements_by_class_name("mnav")
    print(t)
    t[0].click()
    

     百度首页源码中,可以发现【新闻】按钮是第一个

     六、css定位

    1.css来定位class属性的元素前面加个点(.)就行,然后空格变成点(.)就能定位了;#表示id,.表示class属性

    2.当然css也可以取class属性的其中一个属性(页面上唯一的)来定位,定位方法是灵活多变的

    # coding:utf-8
    from selenium import webdriver
    import time
    driver=webdriver.Chrome()
    driver.get("https://www.baidu.com")
    time.sleep(3)
    #css定位
    # driver.find_element_by_css_selector(".mnav.c-font-normal.c-color-t").click()
    #取单个class属性
    driver.find_element_by_css_selector(".mnav").click()

    备注:这里mnav不是唯一的,也可以,默认找第一个  

    七、xpath定位(根据路径找,默认找到第一个a),class的属性值有空格,可以直接使用

    # coding:utf-8
    from selenium import webdriver
    import time
    driver=webdriver.Chrome()
    driver.get("https://www.baidu.com")
    time.sleep(3)
    t=driver.find_element_by_xpath("//div/a[@class='mnav c-font-normal c-color-t']")
    t.click()  
    越努力,越幸运!!! good good study,day day up!!!
  • 相关阅读:
    Bootstrap的下拉菜单float问题
    style标签进行实时编辑及修改css(转)
    立即调用的函数表达式IIFE
    标签球Js插件
    如何正确使用Google搜索
    练习一:四则运算
    ARM伪指令
    vim 命令总结
    dialog BLE SDK 学习(1)
    ARM指令集
  • 原文地址:https://www.cnblogs.com/canglongdao/p/13618469.html
Copyright © 2020-2023  润新知