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

使用Selenium Actions移动元素仍遭谷歌广告拦截点击的解决方法

解决Selenium点击被广告拦截的问题

针对demoQA页面上元素被谷歌广告遮挡导致点击失败的问题,以下几种无需硬编码坐标的解决方案:

1. 用JavaScript直接触发元素点击

通过JavaScript执行元素的click()方法,可以绕过鼠标点击被广告拦截的问题,直接操作元素本身:

@Test
public void navigateTest() {
    By framesLink = By.xpath("(//h5[text()='Alerts, Frame & Windows'])[1]");
    WebElement targetElement = driver.findElement(framesLink);
    // 转换为JavascriptExecutor执行点击
    ((JavascriptExecutor) driver).executeScript("arguments[0].click();", targetElement);
}

2. 动态移除广告元素

如果广告是页面加载后动态出现的,可以先定位广告元素并移除它,消除遮挡:

@Test
public void navigateTest() {
    WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
    // 通用广告定位器(可根据实际页面调整)
    By adLocator = By.xpath("//div[contains(@class, 'ad') or contains(@id, 'ad') or contains(@style, 'ad')]");
    
    try {
        // 等待广告出现后移除
        WebElement adElement = wait.until(ExpectedConditions.presenceOfElementLocated(adLocator));
        ((JavascriptExecutor) driver).executeScript("arguments[0].remove();", adElement);
    } catch (TimeoutException e) {
        // 未检测到广告,直接执行后续操作
    }

    // 点击目标元素
    By framesLink = By.xpath("(//h5[text()='Alerts, Frame & Windows'])[1]");
    driver.findElement(framesLink).click();
}

3. 显式等待元素可点击

确保目标元素完全加载并处于可点击状态后再执行点击,避免被未加载完成的广告临时遮挡:

@Test
public void navigateTest() {
    WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
    By framesLink = By.xpath("(//h5[text()='Alerts, Frame & Windows'])[1]");
    
    // 等待元素满足可点击条件
    WebElement clickableElement = wait.until(ExpectedConditions.elementToBeClickable(framesLink));
    clickableElement.click();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 11:15:15