You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用Selenium如何获取::before/::after伪元素中的链接

问题核心原因

::before、::after是CSS渲染生成的伪元素,不属于真实DOM树,Selenium原生定位方法无法直接选中这类节点。你无法直接拿到链接的本质是:关联的跳转地址要么存储在伪元素对应的宿主DOM元素的CSS content 属性中,要么硬编码在元素绑定的JS点击事件回调里,完全不需要通过点击打开新窗口的方式提取。

高效提取方案

方案1:读取CSS计算样式提取链接(适配绝大多数伪元素挂链接的场景)

这类和伪元素绑定的链接,绝大多数都会直接写在对应伪元素的content样式值里,通过Selenium调用JS直接读取计算后的样式即可,全程不需要触发点击、不需要加载新页面:

from selenium import webdriver
import re

driver = webdriver.Chrome()
# 加载目标页面逻辑自行补充
# driver.get(目标页地址)

# 替换为你需要提取的目标元素对应的CSS选择器
target_elems = driver.find_elements("css selector", ".替换为你的目标元素class")

for elem in target_elems:
    # 读取::before伪元素的content值,如果是::after关联链接就把参数换成'::after'
    raw_content = driver.execute_script("""
        const pseudoProp = window.getComputedStyle(arguments[0], '::before').getPropertyValue('content');
        return pseudoProp;
    """, elem)
    # 去掉content值默认包裹的单/双引号,就是最终的链接
    link = re.sub(r"^['\"]|['\"]$", "", raw_content)
    print(link)

提示:如果确认链接是绑定在::after伪元素上,只需要把JS代码里的'::before'修改为'::after'即可

方案2:提取元素点击事件里硬编码的链接

如果读取到的content值不是链接,说明跳转地址写在元素绑定的点击事件里,直接解析事件属性即可:

for elem in target_elems:
    onclick_str = elem.get_attribute("onclick")
    if not onclick_str:
        continue
    # 从onclick字符串里匹配跳转链接
    link_match = re.search(r"(window.open|location.href)\s*\(\s*['\"]([^'\"]+)['\"]", onclick_str)
    if link_match:
        link = link_match.group(2)
        print(link)
效率说明
  • 原点击开新窗口提取的方案:单条链接需要等待新页面加载、切换窗口句柄、关闭新页、切回原页,单条耗时2-5秒,页面链接多的时候耗时会非常长
  • 上述JS直读方案:单条链接提取耗时在毫秒级,不需要加载任何额外资源,提取效率可以提升上百倍

避坑提醒:不要尝试用Selenium原生的find_element类方法直接定位伪元素,伪元素不在DOM结构中,所有原生定位方法都无法命中这类节点,必须通过JS读取计算样式或者事件属性取值。

内容的提问来源于stack exchange,提问作者DumbCoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 12:27:09