2017-08-17 358741 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

相關問題