如何使用Selenium Python判断::after伪元素是否存在
失效原因说明
- CSS
::after属于浏览器通过样式渲染生成的伪元素,不是真实存在的DOM节点,Selenium 原生的元素定位方法仅支持查找真实DOM节点,因此直接用包含::after的CSS选择器定位完全不生效。 div.vcp-bigplay>div是查找该元素下的真实子div节点,和伪元素没有关联,自然也无法匹配到结果。
可行解决方案
核心思路是通过 Selenium 执行 JavaScript 脚本,获取目标元素的::after伪元素的计算样式,根据属性值判断伪元素是否存在且生效。
代码实现示例
- 首先定位到目标父元素:
# 旧版 Selenium 写法 parent_ele = driver.find_element_by_css_selector('div.vcp-bigplay') # 新版 Selenium 推荐写法(避免版本升级后的废弃警告) from selenium.webdriver.common.by import By parent_ele = driver.find_element(By.CSS_SELECTOR, 'div.vcp-bigplay')
- 封装判断伪元素存在的函数:
def check_after_pseudo_exist(driver, parent_element): # 获取::after伪元素的content属性值,无定义/被禁用时返回值为"none" after_content = driver.execute_script( 'return window.getComputedStyle(arguments[0], "::after").getPropertyValue("content")', parent_element ) # 兼容部分场景下content返回空字符串的情况 return after_content not in ('none', '""', "''", '')
- 调用判断:
if check_after_pseudo_exist(driver, parent_ele): print("::after 伪元素存在") else: print("::after 伪元素不存在")
内容的提问来源于stack exchange,提问作者Arena T.S.
相关产品推荐
相关产品推荐

