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