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