• Python3---Selenium_CSS表达式选择元素


    Python3---Selenium_CSS表达式选择元素

    2020-04-08

    1: CSS Selector 语法选择原理

      CSS 语法作用用来选择元素。基本结构:选择器 {声明}。如下图:学习Selenium我们主要用到的是其“选择器”功能。具体CSS语法学习参考链接:https://www.w3school.com.cn/css/css_syntax.asp

      通过CSS Selector 选择单个元素的方法:find_element_by_css_selector(css selector参数)

      通过CSS Selector 选择全部元素的方法:find_elements_by_css_selector(css selector参数)

    2:根据tag名选择元素。

      使用方法:find_elements_by_css_selector('tag名')

    #!/usr/bin/env python
    
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    
    driver.get('https://www.cnblogs.com/')
    
    driver_script = driver.find_elements_by_css_selector('script')
    
    for i in driver_script:
        print(i)
    
    driver.close()

    3:根据id属性,选择元素的语法是在id号前面加上一个#号:#id值

    #!/usr/bin/env python
    
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    
    driver.get('https://www.cnblogs.com/')
    
    driver_id_main = driver.find_element_by_css_selector('#main')
    
    print(driver_id_main.text)
    
    driver.close()

    4:根据class属性选择元素的语法是在class值前面加上一个点:.class值

    #!/usr/bin/env python
    
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get('https://www.cnblogs.com/')
    driver_class_rss_link = driver.find_elements_by_css_selector('.rss_link')
    
    for i in driver_class_rss_link:
        print(i.text)
    
    driver.close()

    5:选择子元素

      标签当中紧接着包含的元素,称之为子元素。比如:

      表示子元素使用“>”比如:定位元素<div id='layer1'>  可以如下写:#container > #layer1 

      支持连续定位,比如:#container > #layer1  >  .post_nav_block

    <div id='container'>
        
        <div id='layer1'>   #<div id='layer1'><div id='container'>的子元素。
            <div id='inner11'>
                <span>内层11</span>
            </div>
            <div id='inner12'>
                <span>内层12</span>
            </div>
        </div>
    
        <div id='layer2'>  #<div id='layer2'><div id='container'>的子元素。
            <div id='inner21'>
                <span>内层21</span>
            </div>
        </div>
        
    </div>
    #!/usr/bin/env python
    
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    
    driver.get('https://www.cnblogs.com/')
    
    driver_1 = driver.find_elements_by_css_selector('#main > .post_nav_block_wrapper')
    
    for i in driver_1:
        print(i.text)
    
    driver.close()

     6:选择后代元素

      后代元素是指标签当中包含的所有的元素(包括子元素)

      表示子元素使用“空格”比如:定位元素<div id='container'>  当中包含的所有元素,可以如下写:#container  #layer1 

      支持多层选择

    #!/usr/bin/env python
    
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    
    driver.get('https://www.cnblogs.com/')
    
    driver_1 = driver.find_elements_by_css_selector('#main  .rss_link')
    
    for i in driver_1:
        print(i.text)
    
    driver.close()

    7:根据属性值选择定位

      css 选择器支持通过任何属性来选择元素,语法是用一个方括号 [] 

    #!/usr/bin/env python
    
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    
    driver.get('https://www.cnblogs.com/')
    
    driver_1 = driver.find_elements_by_css_selector('[href = "#"]')
    
    for i in driver_1:
        print(i.text)
    driver.close()

    8:组选择

      组选择使用“逗号”来选择两个不同的元素

    #!/usr/bin/env python
    
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    
    driver.get('https://www.cnblogs.com/')
    
    driver_1 = driver.find_elements_by_css_selector('#main [href="#"],#main [href="/following"]')
    
    for i in driver_1:
        print(i.text)
    
    driver.close()

    9:按次序选择子节点

      使用“nth-child”来指定父元素的第几个子节点

      9.1:选择某元素的第二个子节点

      :nth-child(2)

    #!/usr/bin/env python
    
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    
    driver.get('https://www.cnblogs.com/')
    
    driver_1 = driver.find_elements_by_css_selector('#main .post_nav_block :nth-child(2)')
    
    for i in driver_1:
        print(i.text)
    
    driver.close()

      9.2:指定某元素下的指定tag类型的第几个子节点

      span:nth-child(2)

      

  • 相关阅读:
    解决:Ubuntu12.04下使用ping命令返回ping:icmp open socket: Operation not permitted的解决
    【Magenta 项目初探】手把手教你用Tensorflow神经网络创造音乐
    python表达式操作符【学习python必知必会】
    关于提高python程序执行效率的思路和想法
    动手前的构思在编写程序中的重要性
    python 之禅
    HTTP 访问学习笔记 留坑
    软件工程与方法学——面向对象程序设计例子
    python 英文字串首字母改为大写
    Objective-C:方法缓存
  • 原文地址:https://www.cnblogs.com/aaron456-rgv/p/12663403.html
Copyright © 2020-2023  润新知