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

Selenium获取无href属性的<a>标签跳转URL问题

解决无href属性的可点击元素预获取跳转URL问题

下面是几种可行的方案:

  • 检查Angular绑定的点击事件
    这类Angular渲染的元素,通常用(click)指令绑定跳转逻辑,试试获取元素的ng-reflect-click属性拿到绑定的方法名:

    click_handler = driver.find_element(By.TAG_NAME, 'a').get_attribute('ng-reflect-click')
    

    拿到方法名后,用execute_script调用浏览器控制台查看方法实现,从中提取跳转的URL。

  • 通过网络监听捕获跳转请求
    用Selenium的CDP命令开启网络监听,在点击前捕获即将发起的跳转请求,不用实际完成点击也能拿到URL:

    # 启用网络监控
    driver.execute_cdp_cmd('Network.enable', {})
    
    # 存储捕获到的URL
    target_urls = []
    def catch_request(params):
        # 只捕获文档类请求(对应页面跳转)
        if params['request']['resourceType'] == 'Document':
            target_urls.append(params['request']['url'])
    
    # 注册请求监听回调
    driver.add_cdp_listener('Network.requestWillBeSent', catch_request)
    
    # 触发点击(如果怕跳转影响后续操作,可以用无头浏览器测试)
    driver.find_element(By.TAG_NAME, 'a').click()
    
    # 输出捕获到的URL
    print(target_urls)
    

    如果是单页应用的路由跳转,换成监听Network.frameNavigated事件更准确。

  • 提取Angular路由配置
    Angular应用的路由规则一般存在全局配置里,执行JS脚本直接获取路由列表,再结合元素文本(比如这里的"2018")匹配对应的路由地址:

    # 适用于Angular Router的情况
    route_config = driver.execute_script("""
        const router = window.ng.getComponent(document.body).router;
        return router.config.map(item => ({path: item.path, url: router.createUrlTree([item.path]).toString()}));
    """)
    print(route_config)
    
  • 检查自定义属性
    有些网站会把跳转地址藏在data-url、data-href这类自定义属性里,直接尝试获取这些属性:

    target_url = driver.find_element(By.TAG_NAME, 'a').get_attribute('data-url')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:25:27