用Selenium和Firefox Webdriver使用Python的Adblock功能

问题描述 投票:11回答:3

我的目标是通过Python在Selenium上使用Adblock Plus。我已经能够让它加载扩展,但默认情况下,它不包括默认过滤器 "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.orgenlatestfaq.html。

python selenium firefox-addon adblock
3个回答
13
投票

事实上,Adblock Plus默认会添加EasyList - 但如果你设置了 extensions.adblockplus.currentVersion 的偏好来禁用updatefirst-run动作。我猜你的目标是防止首次运行的页面出现,但也防止了数据存储初始化。请注意,你这里的问题比较多:即使Adblock Plus添加了EasyList,它的下载时间还是未知的。

更好的做法应该是用现有的初始化你的资料 adblockplus/patterns.ini 文件。您可以从您的常规Firefox配置文件中获取这个文件,并进行EasyList和其他过滤设置,然后将其复制到 /Users/username/Downloads/profilemodel/adblockplus/patterns.ini. 那么下面的方法应该可以。

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

2
投票

有一个更好的方法:

1) 用7-zip或类似的文件解压adblock.xpi。

2)用普通文本编辑器打开modulesAppIntegration.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 -- 瞧!

这将阻止adblock加载欢迎页面,但它仍然会配置必要的订阅设置。 请确保 呼叫

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

否则,它将不知道要 "自我启动"

请注意,这是针对adblock_plus-2.0.3的,因为我使用的是firefox-17。新版本的代码可能会略有不同,并且在不同的位置。请看 https:/issues.adblockplus.orgticket206#comment:5


0
投票

我最近才通过试错找到了如何屏蔽首发页面而不出现任何问题。

  1. 进入你的扩展名所在的文件夹

  2. lib/adblockplus.js,设置 defaults.suppress_first_run_pagetrue 而不是 false.

© www.soinside.com 2019 - 2024. All rights reserved.