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

如何用Selenium Python获取无href锚点标签的隐藏跳转URL?

如何获取无href属性锚点标签的隐藏跳转URL?

环境:Python 3.9.12,Selenium 4.8.0
目标页面:迪士尼加拿大餐厅页面,点击「Search Times」后显示的餐厅列表中,预订按钮的<a>标签无href属性,需要获取其跳转URL。

方法1:查找Angular路由属性(优先尝试)

迪士尼页面基于Angular框架,这类无href的跳转通常会用routerLink自定义属性定义路由路径,直接获取该属性后拼接基础URL即可:

for card in cards:
    # 定位时间按钮的a标签
    time_button = card.find_element(By.CLASS_NAME, 'offer')
    # 获取routerLink属性值
    router_link = time_button.get_attribute('routerLink')
    if router_link:
        # 拼接完整跳转URL
        full_url = f"https://disneyland.disney.go.com{router_link}"
        print(f"预订跳转URL:{full_url}")

方法2:提取点击事件中的URL逻辑

如果没有routerLink属性,可以通过JavaScript获取按钮绑定的点击事件代码,从中提取跳转URL:

import re

for card in cards:
    time_button = card.find_element(By.CLASS_NAME, 'offer')
    # 执行JS获取元素的点击事件监听代码
    click_event_codes = driver.execute_script("""
        const elem = arguments[0];
        const listeners = getEventListeners(elem);
        return listeners.click ? listeners.click.map(l => l.listener.toString()) : [];
    """, time_button)
    
    # 从事件代码中匹配URL
    for code in click_event_codes:
        url_match = re.search(r'https?://[^"\']+|/[^"\']+', code)
        if url_match:
            raw_url = url_match.group()
            # 补全相对URL的基础域名
            full_url = f"https://disneyland.disney.go.com{raw_url}" if raw_url.startswith('/') else raw_url
            print(f"提取到的跳转URL:{full_url}")

方法3:监听网络请求捕获跳转URL

如果前两种方法无效,可通过Selenium的DevTools API监听点击按钮时触发的网络请求,直接捕获跳转目标:

# 启用网络监听
driver.execute_cdp_cmd('Network.enable', {})

# 定义请求回调函数,筛选预订/登录相关URL
def capture_redirect_url(request):
    request_url = request['request']['url']
    if '/reservation' in request_url or '/login' in request_url:
        print(f"捕获跳转URL:{request_url}")

# 注册请求监听
driver.add_cdp_listener('Network.requestWillBeSent', capture_redirect_url)

# 遍历卡片点击按钮触发请求
for card in cards:
    time_button = card.find_element(By.CLASS_NAME, 'offer')
    time_button.click()
    # 点击后返回上一页,继续处理下一个卡片
    driver.back()

# 关闭网络监听
driver.execute_cdp_cmd('Network.disable', {})

注意事项

  1. 页面加载可能存在延迟,建议在点击「Search Times」后添加显式等待(WebDriverWait),确保卡片完全加载后再操作。
  2. Angular页面的元素属性可能随版本变化,若routerLink不存在,可以检查其他自定义属性(如data-url、data-link等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:33:23