2017-08-17 358748 views
-2

我想关闭所有出现在网页中的广告。广告可以出现在不同的地方,两行或一行。 我已经尝试写driver.findelement(By.xpath("//div[@id='cbb']")).click()但问题是所有的广告都有关闭按钮相同的代码。 还有另一种方法可以做到吗?删除Selenium webdriver中的所有广告

enter image description here

+0

你在做什么?你使用Selenium进行网页抓取吗?你能在浏览器中安装一个adblocker吗? – Robert

+0

我在我的普通Chrome上安装了adblock。在打开的新页面中不包含我的任何扩展。如果我有adblocker,我不会问 – ctina

回答

1

选项#1

我建议使用JavascriptExecutor。基本上你可以(在你的情况下,广告的HTML)添加style='visibility: hidden;'到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函数中。

0

如果我理解你的权利,这就是我说的。因为广告可能出现在不同的地方,所以最好制作一个自动化程序,当它看到代码时,自动执行一个程序来关闭它。

你基本上是要告诉它看看这些页面,当它碰到广告时,运行一段代码将它移除并继续前进。

+0

,但我使用硒,所以,如果我将自动打开500页,没有意义手动点击所有这些。 – ctina

+0

我编辑了答案,以便它更加正确,请澄清更多,如果它不是你想要的。 – Sbss1111

+0

我知道这是我需要做的。我的问题是如何。 – ctina

相关问题