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

Ответ 1

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

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

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

Ответ 2

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

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

2) открыть /modules/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 на .xpi - Voila!

Это приведет к тому, что 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