• Python使用selenium中的CSS_SELECTOR进行搞定复杂多标签定位


    一般来讲我们用来定位主要使用xpath定位足够应付大部分的selenium的操作,但是当我们遇到比较复杂的需求的时候xpath就显得有些力不从心,所以这个时候就需要css来帮忙,但是简单的还是可以搞定复杂的又开始麻烦起来,所以我今天就将自己最近最近的问题写下来,以此记录一下。
    我的目标是将这个tr标签里面包含的td标签中的第五个里面的a标签中href给提取出来,如果用xpath的话只能定位到一个,我需要将tbody这个里面所有包含的td标签中的a标签给提取出来在这里插入图片描述
    如果单单是提取一个的话非常简单但是这里面有比较多的干扰项目,也就是里面多个td标签里面存在着a.href标签,这样的话光靠普通的提取肯定是无法选择到其中全部的标签
    在这里插入图片描述
    正当我疑惑的时候我,尝试遍了xpath的基本上能够找的所有方法都无法成功之后我发现了,在选择右键里面有一个selector这个选项,于是我尝试着点击然后我得到了一个地址。
    在这里插入图片描述
    这里面我们可以看到tr里面有个nth-child(1)这个意味着是tr的第一个标签,td中的nth-child(5)这个意味着是td中的第五个标签,然后我们同其他标签对比得到,每个标签里面tr标签是会变动也就是里面的1变成其他数字,里面的td:nth-child(5)是不会变动的。既然如此那我就得出突破口,去看css标签看看有没有详解,因为本人从来没有做过前端那些东西。

    #industry_table > table > tbody > tr:nth-child(1) > td:nth-child(5) > a
    
    • 1

    然后我就从中得到一个非常有用的信息

    :nth-child(n)            			 p:nth-child(2)				选择每个p元素是其父级的第二个子元素
    
    • 1

    也就是意味着我如果使用这里面的nth-child(n)我就可以非常轻松定位其中的标签
    因为我的目标是获取到tbody中所有的第五个td标签中a标签,那么通过这个我就得到代码

    driver.find_elements(By.CSS_SELECTOR,'table.table-model  tbody tr td:nth-child(5) a')
    
    • 1

    然后我们再来拆分css选择器中这段代码的意思
    table.table-model 选择所有class="table-model "的元素
    然后空格就表示包含在这个标签里面的tbody
    tr同上
    td:nth-child(5) 选择每个td元素是其父级的第5个子元素
    然后选中a标签
    最后我们再用遍历就可以提取a标签里面的href中所有的链接
    注意如果我们要找到的多个标签并且放入selenium的list中的话find_elements的最后面一定要加s如果不加s的话就代表你要找到的是单个标签这样的话我们后面一遍历就会出现报错找不到标签的情况
    还有更多关于CSS_SELECTOR定位方法的可以去这里看看
    CSS 选择器

  • 相关阅读:
    大数据ClickHouse进阶(六):Distributed引擎深入了解
    安装BBR教程,来加速VPS
    挖掘文本的奇妙力量:传统与深度方法探索匹配之道
    页面结构分析
    大数据面试经验分享
    2023年中国研究生数学建模竞赛D题解题思路
    金仓数据库WalMiner日志逻辑解码工具 (2. 概述)
    如何解释”字面量“?
    ACM-ICPC Northeastern European Regional Contest (NEERC 15) -Generators
    文件包含漏洞及漏洞复现
  • 原文地址:https://blog.csdn.net/qq_16519957/article/details/125999441