Python с использованием Adblock с Selenium и Firefox Webdriver

моя цель-использовать Adblock Plus с Selenium через Python. Я смог получить его до того момента, когда он загрузит расширение, но по умолчанию он не включает фильтр по умолчанию "EasyList."Вот что у меня есть до сих пор:

 from selenium import webdriver
 from time import sleep
 ffprofile = webdriver.FirefoxProfile()
 adblockfile = '/Users/username/Downloads/adblock_plus-2.4-tb+fx+an+sm.xpi'
 ffprofile.add_extension(adblockfile)
 ffprofile.set_preference("extensions.adblockplus.currentVersion", "2.4")
 browser = webdriver.Firefox(ffprofile)
 while(True):
    browser.get("www.cnn.com")
    sleep(5)

большая часть этого кода была сорвана с http://selenium-python.readthedocs.org/en/latest/faq.html

2 ответов


на самом деле, Adblock Plus добавит EasyList по умолчанию - но не если вы установите extensions.adblockplus.currentVersion предпочтение для отключения действий обновления/первого запуска. Я предполагаю, что ваша цель состояла в том, чтобы предотвратить появление первой страницы, но также предотвратить инициализацию хранилища данных. Обратите внимание, что у вас здесь больше проблем: даже если Adblock Plus добавляет EasyList, для загрузки все равно потребуется неизвестное время.

лучший курс действий должен инициализировать ваш профиль с помощью существующего . Вы можете получить этот файл из своего обычного профиля Firefox с настройками EasyList и других фильтров и скопировать его в /Users/username/Downloads/profilemodel/adblockplus/patterns.ini. Тогда должно работать следующее:

ffprofile = webdriver.FirefoxProfile("/Users/username/Downloads/profilemodel");

есть лучший способ сделать это:

1) извлечь adblock.xpi с 7-zip или эквивалентом

2) Открыть / модули / AppIntegration.jsm с обычным текстовым редактором

3) Найдите объявление функции для "notifyUser ()" и замените его простым возвратом. например:

/**
* function notifyUser()
* {
*   let wrapper = (wrappers.length ? wrappers[0] : null);
*   if (wrapper && wrapper.addTab)
*   {
*       wrapper.addTab("chrome://adblockplus/content/ui/firstRun.xul");
*   }
*   else
*   {
*       Utils.windowWatcher.openWindow(wrapper ? wrapper.window : null,
*                                                                    "chrome://adblockplus/content/ui/firstRun.xul",
*                                                                    "_blank", "chrome,centerscreen,resizable,dialog=no", null);
*   }
* }
*/

function notifyUser()
{
    return;
}

теперь вам просто нужно упаковать файлы обратно в zip и изменить расширение .zip to .xpi -- вуаля!

это остановит adblock от загрузки страница приветствия, но она все равно настроит необходимые параметры подписки. Убедитесь не называть

ffprofile.set_preference("extensions.adblockplus.currentVersion", "x.x.x")

в противном случае он не будет знать, чтобы "загрузиться"

обратите внимание, что это для adblock_plus-2.0.3, так как я использую firefox-17. Код может немного отличаться, и в другом месте для более новых версий. Смотри:https://issues.adblockplus.org/ticket/206#comment:5