删除 Selenium webdriver 中的所有广告

Delete all the ads in Selenium webdriver

我想将网页中出现的所有广告一一关闭。广告可以出现在不同的地方,两个或一个排成一排。 我曾尝试编写 driver.findelement(By.xpath("//div[@id='cbb']")).click(),但问题是所有广告的关闭按钮代码都相同。 还有其他方法吗?

选项 #1

我建议使用 JavascriptExecutor。您基本上可以将 style='visibility: hidden;' 添加到 HTML 块(在您的情况下是广告的 HTML):

public void hideElement(String xpath)
{
    WebElement element = driver.findElement(By.xpath(xpath));       
    ((JavascriptExecutor)driver).executeScript("arguments[0].style.visibility='hidden'", element);
}

为了隐藏多个元素,你需要想出 JS 函数,它会隐藏元素,然后将它 作为字符串 传递给 executeScript()

public void hideElements()
{

String jscode = "var elements = document.getElementsByClassName('className');
    for (var i = 0; i < elements.length; i++){
        elements[i].style.display = 'none';
    };";   

// escaping single / double quotes / tabs / line breaks / so on
jscode =  escapeJS(jscode);   

    ((JavascriptExecutor)driver).executeScript(jscode);
}

辅助函数(需要此导入:org.apache.commons.lang3.StringEscapeUtils; - 您可以从 here 获取此库):

/**
 * Escapes JS.
 */
public static String escapeJS(String value) {
    return StringEscapeUtils.escapeEcmaScript(value);
}

注意,确保添加必要的超时以等待所有广告加载到页面上,然后再尝试隐藏它们

选项 #2 - 如果您的页面上没有 jQuery,则有点硬核

  • 如果您没有 jQuery - 您可以将其添加到 DOM(这将需要添加一些 Java 代码)然后使用它在我上面发布的 Java 代码中隐藏元素的方法

  • 如果您的页面上加载了 jQuery - 只需搜索 jQuery 代码以在页面上隐藏 HTML(替代我在上面发布的 vanilla JS ) 并将这些代码添加到 Java 函数。