Python / Selenium:如何使用无头Chrome驱动程序模拟uBlock或AdBlock等扩展程序?

时间:2017-06-24 10:48:29

标签: python google-chrome selenium google-chrome-extension

我在Python中使用Selenium / ChromeDriver。在我的代码中使用ChromeDriver选项:

options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('load-extension=' +uBlockExtensionPATH)
browser = webdriver.Chrome(chrome_options=options)

但是,根据此answer无头Chrome不支持使用扩展程序。我能够让无头的Chrome使用我当前的Python脚本,一切正常,但由于第三方广告/分析/请求,它需要很长时间才能到达网站。

在我实施无头ChromeDriver之前,我使用了标准的非无头 ChromeDriver并导入了uBlock扩展程序,以消除第三方网站减慢测试速度。

例如,完成我的测试没有 -headless选项和 uBlock扩展名大约需要20秒左右。但是,完成我的测试 - -headless选项和没有 uBlock,我的测试大约需要一分钟才能完成。这违背了我最初缩短测试时间的目标,这就是为什么我想首先使用无头Chrome驱动程序。

由于我无法在无头模式下导入Chrome扩展程序,如何屏蔽第三方广告/分析/请求( a.k.a.uBlock的目的)?

我对代理或网络相关的知识不太了解。我知道一个选项是黑名单导致连接速度慢的所有主机,但是这些主机不断变化,并且过多地将每个主机单独列入黑名单。

1 个答案:

答案 0 :(得分:2)

由于无头模式不支持扩展,因此代理服务器似乎是最好的操作方法。

您可以尝试使用https://github.com/epitron/mitm-adblock设置本地代理服务器(用python编写并易于设置),并在启动chrome时添加--proxy-server=localhost:8118。它支持AdblockPlus easylist,它应该相当全面。

您也可以尝试使用节点编写的https://github.com/Artificial-University/adblock-proxy,但它看起来更完整,最近更新。