2017-07-27 125 views
0

我試圖禁用的AdBlock只有特定的網站後,但我無法找到一個方法來做到這一點。我試圖尋找selenium documentation,但是我找不到任何方法來關閉擴展。不過,我在閱讀文檔方面還很新,所以我可能錯過了一些東西。我也嘗試通過使用硒自動化禁用AdBlock擴展,但它不起作用。計劃是去chrome的擴展部分(chrome:// extensions /),獲取「enabled」複選框,然後在沒有我的介入的情況下單擊它。這是我的嘗試:Python的 - 如何禁用擴展,打開瀏覽器窗口,硒

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.chrome.options import Options 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.common.exceptions import TimeoutException 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.common.exceptions import StaleElementReferenceException 

def main(): 
     opening = True 
     while opening: 
       try: 
         chrome_options = Options() 
         #Path to AdBlock 
         chrome_options.add_extension('/usr/local/bin/AdBlock_v.crx') 
         driver = webdriver.Chrome(chrome_options=chrome_options) 
       except: 
         print('An unkown error has occured. Trying again...') 
       else: 
         opening = False   

     disable_adblocker(driver) 


def click_element(driver, xpath, index): 
     getting = True 
     not_found_times = 0 
     while getting: 
       try: 
         getting = False    
         element = WebDriverWait(driver, 5).until(
          EC.presence_of_all_elements_located((By.XPATH,xpath)))[index] 
         element.click() 
      #driver.get(element.get_attribute("href")) 


      #In case the page does not load properly 
       except TimeoutException: 
         not_found_times += 1 
         if not_found_times < 2: 
           driver.refresh() 
           getting = True 
         else: 
           raise 

      #In case DOM updates which makes elements stale 
       except StaleElementReferenceException: 
         getting = True 


def disable_adblocker(driver): 
     driver.get('chrome://extensions') 
     ad_blocker_xpath = '//div[@id="gighmmpiobklfepjocnamgkkbiglidom"]//div[@class="enable-controls"]//input' 
     click_element(driver,ad_blocker_xpath,0) 
     print('') 


main() 

我嘗試失敗的原因是因爲硒不能使用我指定的xpath來獲取複選框元素。我相信這條道路是正確的。一個用的AdBlock和另一個沒有的AdBlock:

,我能想到的是創建兩個Chrome瀏覽器窗口的唯一解決方案。但是,我不想要兩個窗口,因爲這會讓事情變得更加複雜。

回答

1

它看起來並不像這樣使用硒任何設置是可能的。但是...您可以在創建驅動程序後自動添加您希望排除的域。

測試之前真正開始,但你初始化的瀏覽器之後,導航到Chrome瀏覽器擴展:// [您的AdBlock extention ID] /options.html。 AdBlock擴展ID對於crx文件是唯一的。因此,進入chrome並在擴展管理器中查找值。例如,我的是gighmmpiobklfepjocnamgkkbiglidom。

您瀏覽到該頁面後,點擊「自定義」,然後選擇「展示廣告隨處可見,除了這些域...」,然後輸入域名進入該領域,然後點擊「確定」。繁榮!現在該域名已添加並將顯示廣告!只要確保

我知道它不是理想的快速,容易,一行代碼解決方案......但它似乎是最好的選擇,除非你想挖掘本地存儲文件,並找到這個數據是在哪裏加入...