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

Selenium如何模拟点击不加载跳转页 提取商品prodNum参数

Angular电商站点商品prodNum参数提取方案

以下方案均不需要实际加载商品详情页,采集效率和直接读取DOM一致:

  • 方案1:拦截导航事件抓跳转地址(兼容性最高)
    点击商品前先注入JS脚本拦截所有页面跳转行为,将目标URL存储到全局变量后直接阻断导航,完全不会触发新页面加载:

    1. 列表页DOM加载完成后,先执行以下注入脚本:
    window.__targetUrl = null;
    // 拦截location赋值跳转
    const originLocation = Object.getOwnPropertyDescriptor(window, 'location');
    Object.defineProperty(window, 'location', {
      set(val) {
        window.__targetUrl = val;
      },
      get() {
        return originLocation.get.call(this);
      }
    });
    // 拦截单页应用路由跳转
    const originPush = history.pushState;
    history.pushState = (_, __, url) => window.__targetUrl = url;
    const originReplace = history.replaceState;
    history.replaceState = (_, __, url) => window.__targetUrl = url;
    
    1. 正常定位商品元素执行点击操作,此时跳转被拦截,不会触发页面加载
    2. 读取window.__targetUrl值,解析URL参数提取prodNum即可,提取后重置window.__targetUrl = null即可处理下一个商品
  • 方案2:直接读取Angular绑定的数据源(效率最高)
    Angular框架会把DOM绑定的数据直接挂在元素属性上,不需要触发点击就能拿到完整商品数据:

    • 针对AngularJS(1.x版本):定位商品元素后执行脚本const item = angular.element(元素DOM).scope().item,prodNum字段直接存在item对象中
    • 针对Angular 2+版本:直接读取元素的__ngContext__属性,遍历该数组内存储的组件、数据对象,找到带prodNum/prodNumber字段的对象即可拿到值
  • 方案3:插桩clickOnItem函数拿入参
    不需要查找函数原定义位置,直接在全局重写该函数拦截入参:

    const originClick = window.clickOnItem;
    window.clickOnItem = (item, idx) => {
      window.__currentItem = item;
      // 不执行原函数逻辑,避免跳转
    }
    

    触发商品点击后直接读取window.__currentItem即可拿到完整商品数据,prodNum为该对象的内置字段。

实操提示:如果站点开启了CSP、代码混淆程度较高,优先使用方案1,只要点击后存在跳转行为就可以100%抓到目标地址,无额外性能消耗。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:36:28