Python Selenium中如何基于父元素用CSS选择器定位直接子元素
解决Python Selenium中CSS选择器无法以
>开头的问题 针对你遇到的CSS选择器不能直接以>开头的问题,给你几个实用的替代方案,不用繁琐的XPath:
方法1:用
:scope伪类(最贴合需求):scope伪类专门用来指代当前执行查找的上下文元素(也就是这里的row),这样就能合法地用>来选择直接子元素了,完美匹配你原本的逻辑:for row in driver.find_elements(By.CSS_SELECTOR, "div[style='overflow: hidden;'] > div > div:nth-child(3)"): player = row.find_element(By.CSS_SELECTOR, ':scope > div:first-child > span').text方法2:简化选择器(仅限结构确定的场景)
如果能确定row的第一个子元素就是div,或者你只需要匹配row下第一个div后代里的span,可以直接去掉开头的>:for row in driver.find_elements(By.CSS_SELECTOR, "div[style='overflow: hidden;'] > div > div:nth-child(3)"): player = row.find_element(By.CSS_SELECTOR, 'div:first-child > span').text注意:如果
row的第一个子元素不是div,这个选择器会匹配row所有后代里的第一个div,可能不符合预期,所以只适合结构固定的情况。方法3:分两步查找(逻辑更直观)
先找到row的直接子div,再在这个div里找span,步骤清晰不容易出错:for row in driver.find_elements(By.CSS_SELECTOR, "div[style='overflow: hidden;'] > div > div:nth-child(3)"): child_div = row.find_element(By.CSS_SELECTOR, ':scope > div:first-child') player = child_div.find_element(By.CSS_SELECTOR, 'span').text
内容的提问来源于stack exchange,提问作者okay
相关产品推荐
相关产品推荐

