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

Selenium:获取JS触发的跳转URL且不跳转当前页面

实现方案

方案1:拦截页面跳转行为(推荐用Selenium)

如果用Selenium控制浏览器,可以通过重写浏览器的跳转方法来阻止跳转,同时捕获目标URL。比如覆盖window.location.href或者window.open的默认行为:

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("你的目标页面URL")

# 注入JS代码,拦截跳转并存储目标URL
driver.execute_script("""
window.targetUrl = null;
// 覆盖location.href的setter
Object.defineProperty(window.location, 'href', {
  set: function(val) {
    window.targetUrl = val;
    // 不执行实际跳转
  }
});
// 同时覆盖window.open以防用新窗口跳转
window.open = function(url) {
  window.targetUrl = url;
  return null;
};
""")

# 点击按钮
driver.find_element(By.CSS_SELECTOR, "你的按钮选择器").click()

# 获取捕获到的URL
target_url = driver.execute_script("return window.targetUrl;")
print("目标URL:", target_url)

driver.quit()

这个方法不需要深入分析复杂JS,直接在浏览器环境里拦截跳转动作,拿到目标URL后页面不会跳转,还能继续操作原页面。

方案2:逆向提取URL生成逻辑

如果拦截方法失效(比如JS用了更底层的跳转方式),就得定位生成URL的代码:

  • 打开Chrome DevTools的Sources面板,给按钮的点击事件加断点(右键按钮→检查→在元素面板右键→Break on→Attribute modifications)
  • 点击按钮后触发断点,沿着调用栈往上找,看哪一步生成了跳转URL
  • 把生成URL的关键JS代码提取出来,用Python的execjs库在本地执行:
import execjs

# 提取到的生成URL的JS代码片段
js_code = """
function generateTargetUrl() {
  // 这里是从页面源码中提取的URL生成逻辑
  var baseUrl = "https://example.com/";
  var params = {id: 123, token: getToken()};
  return baseUrl + "?" + new URLSearchParams(params).toString();
}

// 如果有依赖的函数,也要一并提取
function getToken() {
  return "abc123";
}
"""

# 执行JS获取URL
ctx = execjs.compile(js_code)
target_url = ctx.call("generateTargetUrl")
print("目标URL:", target_url)

如果JS依赖页面环境的变量(比如document、window),可以直接用Selenium的execute_script在浏览器环境里执行提取的代码。

方案3:沙箱环境模拟页面执行

如果要完全模拟页面环境,推荐用playwright(比Selenium更灵活),它可以在隔离的上下文里加载页面,执行点击动作并拦截所有网络请求:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    
    # 监听所有跳转请求
    target_url = None
    def handle_request(request):
        nonlocal target_url
        # 判断是否是跳转请求(根据请求类型或URL特征)
        if request.resource_type == "document" and request.url != page.url:
            target_url = request.url
            request.abort() # 阻止跳转
    
    page.on("request", handle_request)
    
    page.goto("你的目标页面URL")
    page.click("你的按钮选择器")
    
    print("目标URL:", target_url)
    browser.close()

Playwright的请求监听可以精准捕获跳转请求,直接abort就能阻止页面跳转,同时拿到目标URL。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:40:14