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

能否用Python+Selenium/Selenium-wire实现异步嵌入代码替换?

实现Adobe Experience Platform标签脚本的自动化替换(用于测试)

完全可行,请求拦截器就是这类场景的标准解决方案,能在请求发送前修改脚本的源地址,完美适配自动化测试需求。下面是主流自动化测试工具的具体实现方式:

Playwright 实现方式

Playwright自带请求拦截API,能精准命中目标脚本并替换URL:

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch();
  const page = await browser.newPage();

  // 拦截所有符合特征的Adobe Launch脚本请求
  await page.route('**://assets.adobedtm.com/**/launch-*.min.js', route => {
    // 替换成你的目标脚本地址
    const modifiedUrl = 'https://your-custom-domain.com/your-custom-launch-script.min.js';
    route.continue({ url: modifiedUrl });
  });

  await page.goto('https://your-target-page.com');
  // 这里写你的测试逻辑

  await browser.close();
})();

用**://assets.adobedtm.com/**/launch-*.min.js作为匹配规则,能精准定位原脚本,避免误改其他资源。

Cypress 实现方式

Cypress的cy.intercept()专门用来处理请求拦截,还能直接验证替换结果:

describe('替换Adobe Launch脚本', () => {
  it('修改脚本源地址并验证', () => {
    // 拦截目标脚本请求并修改URL
    cy.intercept('GET', '**://assets.adobedtm.com/**/launch-*.min.js', (req) => {
      req.url = 'https://your-custom-domain.com/your-custom-launch-script.min.js';
    });

    cy.visit('https://your-target-page.com');
    // 可选:验证修改后的脚本是否成功加载
    cy.get('script[src="https://your-custom-domain.com/your-custom-launch-script.min.js"]').should('exist');
  });
});

Selenium 实现方式

Selenium本身没有内置请求拦截,但可以通过Chrome DevTools Protocol(CDP)实现:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
driver = webdriver.Chrome(options=options)

# 启用CDP网络功能
driver.execute_cdp_cmd('Network.enable', {})

# 设置请求拦截规则
def handle_intercept(request):
    req_url = request['request']['url']
    # 判断是否是目标Adobe Launch脚本
    if 'assets.adobedtm.com' in req_url and 'launch-' in req_url and req_url.endswith('.min.js'):
        modified_url = 'https://your-custom-domain.com/your-custom-launch-script.min.js'
        # 修改URL后继续请求
        driver.execute_cdp_cmd('Network.continueInterceptedRequest', {
            'interceptionId': request['interceptionId'],
            'url': modified_url
        })
    else:
        # 其他请求正常放行
        driver.execute_cdp_cmd('Network.continueInterceptedRequest', {
            'interceptionId': request['interceptionId']
        })

# 开启请求拦截,只拦截脚本类资源
driver.execute_cdp_cmd('Network.setRequestInterception', {
    'patterns': [{'urlPattern': '*', 'resourceType': 'Script', 'interceptionStage': 'HeadersReceived'}]
})

# 监听拦截事件
driver.add_event_listener('Network.requestIntercepted', handle_intercept)

driver.get('https://your-target-page.com')
# 后续测试逻辑...

driver.quit()

注意事项

  • 匹配规则要精准:优先结合原脚本的域名assets.adobedtm.com和文件名特征launch-*.min.js,避免误改其他脚本。
  • 等待脚本加载:如果测试逻辑依赖替换后的脚本,记得用工具的等待API(比如Playwright的page.waitForRequest、Cypress的cy.wait())确保脚本加载完成。
  • 跨域问题:如果目标脚本域名和测试页面域名不同,要确保测试环境允许跨域,或者在工具里配置跨域支持。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:55:26