• selenium3+python自动化3-css定位总结


    一、css结合基本属性定位(id,class,标签)

    css+id定位:driver.find_element_by_css_selector("#id值")

    css+class定位:driver.find_element_by_css_selector(".class值")

    css+标签定位:driver.find_element_by_css_selector("标签名")

    from selenium import webdriver
    from time import sleep
    driver=webdriver.Chrome()
    driver.get('https://www.baidu.com/')
    sleep(2)
    #css中用#表示id属性,.表示class属性,css直接用标签名称
    driver.find_element_by_css_selector("#kw").send_keys("python")
    driver.find_element_by_css_selector('.s_ipt').send_keys("ahha")
    driver.find_element_by_css_selector('input').send_keys('杨你')
    sleep(1)
    driver.quit()

    二、css结合其他属性定位

    css+其他属性:driver.find_element_by_css_selector('[属性名=属性值]')

    css+多个其他属性:driver.find_element_by_css_selector('[属性名1=属性值1][属性名2=属性值2]')

    from selenium import webdriver
    from time import sleep
    driver=webdriver.Chrome()
    driver.get('https://www.baidu.com/')
    sleep(2)
    #css通过其他属性定位
    driver.find_element_by_css_selector('[name="wd"]').send_keys("aaaaaa")
    sleep(1)
    driver.find_element_by_css_selector('[autocomplete="off"]').send_keys('bbbbb')
    sleep(1)
    driver.find_element_by_css_selector('[name="wd"][autocomplete="off"]').send_keys("多个属性定位")
    sleep(1)
    driver.quit()

    三、css标签结合其他属性定位

    标签+id属性定位:driver.find_element_by_css_selector(‘标签名#id值’)

    标签+class属性定位:driver.find_element_by_css_selector(‘标签名.class值’)

    标签+其他属性定位:driver.find_element_by_css_selector('标签名[属性名=属性值]')

    from selenium import webdriver
    from time import sleep
    driver=webdriver.Chrome()
    driver.get('https://www.baidu.com/')
    sleep(2)
    #css标签和属性结合定位
    driver.find_element_by_css_selector('input#kw').send_keys('cccc')
    sleep(1)
    driver.find_element_by_css_selector('input.s_ipt').send_keys('dddd')
    sleep(1)
    driver.find_element_by_css_selector('input[name="wd"]').send_keys('eee')
    sleep(1)
    driver.quit()

    四、css层级定位

    以定位百度输入框为例,虽然能用id直接定位,但是不绕路,也就没法讲层级了。哈哈

     相信有了前面的基础,能直接看懂代码

    from selenium import webdriver
    from time import sleep
    driver=webdriver.Chrome()
    driver.get('https://www.baidu.com/')
    sleep(2)
    #css层级定位
    driver.find_element_by_css_selector('form#form>span>input').send_keys('111')
    sleep(1)
    driver.find_element_by_css_selector('form.fm>span>input').send_keys('222')
    sleep(1)
    driver.find_element_by_css_selector('form[name="f"]>span>input').send_keys("333")
    sleep(1)
    driver.quit()

    五、css索引

    以百度首页未来,又要绕路了。

    标签名:nth-child(1)来定位元素,索引值是从1开始的,上代码,马上懂

    from selenium import webdriver
    from time import sleep
    driver=webdriver.Chrome()
    driver.get('https://www.baidu.com/')
    sleep(2)
    #css索引 标签名:nth-child(1)来定位子元素
    test1=driver.find_element_by_css_selector('div#ftCon>div>div>p>a:nth-child(1)').text
    test2=driver.find_element_by_css_selector('div#ftCon>div>div>p>a:nth-child(2)').text
    test3=driver.find_element_by_css_selector('div#ftCon>div>div>p>a:nth-child(3)').text
    test4=driver.find_element_by_css_selector('div#ftCon>div>div>p>a:nth-child(4)').text
    print(test1,test2,test3,test4)
    sleep(1)
    driver.quit()

    如果不写索引,则默认选择标签中第一个,要找的标签在“兄弟标签”中的第几个,索引值就写几,见图

    补充(20200211)

    在使用css的索引时应该注意:我们看到相同标签的索引值可能跟定位时的索引值不一样,应该以定位到的为准。比如下图:

    (1)“公共信息”对应h3的索引值看似是2,但是在真正定位的时候是索引值是3,因为源码中将div标签和h3标签的索引在一起定义。

    (2)“发布调查”对应tr的索引值看似是2,但其实真正定位的时候索引值是5,原因源代码tr的设计并不是我们看到的那样,源码中一些内容并未能从页面直接看出来。比如第三个tr是“查看公告”文本,第四个tr内容为空。

    (3)正确定位

      driver.find_element_by_css_selector('#leftmenuDiv > h3:nth-child(3) > a').click()#公共信息定位
      driver.find_element_by_css_selector('#leftmenuDiv > div:nth-child(4)>table>tbody>tr:nth-child(5)').click()#发布调查定位

     六、css模糊匹配

    contains("xxx")目前用不到了,css中没有这种定位方法,网上能找到css模糊匹配的其他方法,我这里未做深究。

    driver.find_element_by_css_selector('input:contains("kw")')这个会报错哦!

    写在结尾:能静下心来写一篇文章,蛮有成就感的,这就是小确幸吧

    参考博客:https://www.cnblogs.com/yoyoketang/p/6128580.html

  • 相关阅读:
    fedora安装后的配置
    linux下的Shell编程(7)使用-x和-n调试shell程序
    linux下的Shell编程(8)自定义函数
    linux下的Shell编程(6)case和select
    linux下的Shell编程(5)循环
    linux下的Shell编程(4)特殊的变量和占位符
    linux下的Shell编程(3)shell里的流程控制
    Linux下的Shell编程(2)环境变量和局部变量
    Linux下的Shell编程(1)最简单的例子
    Docker学习笔记
  • 原文地址:https://www.cnblogs.com/xiaobeibi/p/12202151.html
Copyright © 2020-2023  润新知