selenium - 无法将browsec扩展名添加到firefox个人资料

时间:2018-03-24 17:55:05

标签: python selenium selenium-webdriver

我想用selenium来刮掉一些网站。我无法通过自己的互联网连接访问该网站,因此我需要使用browsec mozilla插件。

我无法在启用加载项的情况下使用selenium启动firefox。 这是我尝试过的:

import selenium
from selenium import webdriver

url = "http://url"
profile = webdriver.FirefoxProfile()
profile.add_extension('browsec@browsec.com.xpi')
#profile.add_extension("C:\Users\urs\AppData\Roaming\Mozilla\Firefox\Profiles\abc.default\extensions\browsec@browsec.com.xpi")
driver = webdriver.Firefox(firefox_profile=profile)

if __name__ == "__main__":
   driver.get(url)
   driver.wait(5)
   driver.quit()

我已尝试将扩展名放在我脚本所在的同一目录中,并使用以下

profile.add_extension('browsec@browsec.com.xpi')

在我运行时给出了这个错误:

  

Traceback(最近一次调用最后一次):文件   " C:\ Python36 \ lib中\站点包\硒\的webdriver \火狐\ firefox_profile   .ad",第346行,在_addon_details中       with open(os.path.join(addon_path,' install.rdf'),' r')为f:FileNotFoundError:[Errno 2]没有这样的文件或目录:   ' C:\用户\ USR \ APPD   ATA \本地\ TEMP \ tmp0hny31u3.browsec@browsec.com.xpi \的install.rdf'

     

在处理上述异常期间,发生了另一个异常:

     

回溯(最近一次呼叫最后一次):文件" test.py",第7行,in          profile.add_extension(" browsec@browsec.com.xpi")文件" C:\ Python36 \ lib \ site-packages \ selenium \ webdriver \ firefox \ firefox_profile   .py",第95行,在add_extension中       self._install_extension(extension)File" C:\ Python36 \ lib \ site-packages \ selenium \ webdriver \ firefox \ firefox_profile   .install",第274行,在_install_extension中       addon_details = self._addon_details(addon)File" C:\ Python36 \ lib \ site-packages \ selenium \ webdriver \ firefox \ firefox_profile   .ad",第351行,在_addon_details中       引发AddonFormatError(str(e),sys.exc_info()[2])selenium.webdriver.firefox.firefox_profile.AddonFormatError:(" [Errno]   2]没有这样的文件或目录:   ' C:\\用户\\ USR \\应用程序数据\\本地\\温度\\ tmp0hn   y31u3.browsec@browsec.com.xpi \\ install.rdf'",)

我也试过提供扩展的路径:

profile.add_extension("C:\Users\urs\AppData\Roaming\Mozilla\Firefox\Profiles\abc.default\extensions\browsec@browsec.com.xpi")

我遇到了这个错误:

  

profile.add_extension(" C:\用户\哈桑\应用程序数据\漫游\ Mozilla的\火狐\ Profi的   LES \ n5jwlj9l.default \扩展\ browsec@browsec.com.xpi")                            ^ SyntaxError :( unicode错误)' unicodeescape'编解码器不能解码位置2-3中的字节:截断   \ UXXXXXXXX转义

如下所示格式化路径字符串也无济于事。

profile.add_extension(r"C:\Users\urs\AppData\Roaming\Mozilla\Firefox\Profiles\abc.default\extensions\browsec@browsec.com.xpi")

我得到以下内容:

  

回溯(最近一次呼叫最后一次):文件" test.py",第7行,in          profile.add_extension(R" C:\用户\哈桑\应用程序数据\漫游\ Mozilla的\火狐\教授   iles \ n5jwlj9l.default \ extensions \ browsec@browsec.com.xpi")文件   " C:\ Python36 \ lib中\站点包\硒\的webdriver \火狐\ firefox_profile   .py",第95行,在add_extension中       self._install_extension(extension)File" C:\ Python36 \ lib \ site-packages \ selenium \ webdriver \ firefox \ firefox_profile   .install",第274行,在_install_extension中       addon_details = self._addon_details(addon)File" C:\ Python36 \ lib \ site-packages \ selenium \ webdriver \ firefox \ firefox_profile   .ad",第351行,在_addon_details中       引发AddonFormatError(str(e),sys.exc_info()[2])selenium.webdriver.firefox.firefox_profile.AddonFormatError:(" [Errno]   2]没有这样的文件或目录:   ' C:\\用户\\ USR \\应用程序数据\\本地\\温度\\ tmp1he   0fym_.browsec@browsec.com.xpi \\ install.rdf'",)

如何配置selenium以默认启用browsec来运行firefox?

3 个答案:

答案 0 :(得分:1)

您可以尝试在firefox浏览器上创建配置文件,例如 - 在Windows上运行 - >输入

"firefox.exe -P" 

它将打开配置文件管理器。创建新的个人资料从该配置文件启动Firefox,添加插件。并使用相同的配置文件与代码..有时它对我有用..

答案 1 :(得分:0)

对不起,我的英语))

您很有可能正在使用新版本的Firefox(Quantum-从第57版开始)。在较新版本的Firefox中,扩展名元数据不存储在install.rdf文件中,而是存储在manifest.json文件中。 Selenium还不知道这一点(在3.11版中,仅在3.14中学习)。因此,在尝试连接扩展时,它会寻找习惯install.rdf。

Here作者编写了一个类,对该类的连接功能稍有更改,并且selenium取代了install.rdf,在manifest.json中查找元数据。

您需要做什么:

# Add Import

import json
import os
import sys

from selenium.webdriver.firefox.firefox_profile import AddonFormatError

# Add class

class FirefoxProfileWithWebExtensionSupport(webdriver.FirefoxProfile):
    def _addon_details(self, addon_path):
        try:
            return super()._addon_details(addon_path)
        except AddonFormatError:
            try:
                with open(os.path.join(addon_path, 'manifest.json'), 'r') as f:
                    manifest = json.load(f)
                    return {
                        'id': manifest['applications']['gecko']['id'],
                        'version': manifest['version'],
                        'name': manifest['name'],
                        'unpack': False,
                    }
            except (IOError, KeyError) as e:
                raise AddonFormatError(str(e), sys.exc_info()[2])

# Declare Firefox_profile written class

profile = FirefoxProfileWithWebExtensionSupport()

像往常一样)))

祝你好运)))

答案 2 :(得分:0)

我发现this文章很有帮助。

您无需在配置文件中添加扩展名,而是在创建浏览器后安装它:

from selenium import webdriver


driver = webdriver.Firefox()
# This installs adblock plus
driver.install_addon("/home/your_username/coding/Project/seleniumTest/adblock.xpi", temporary=True)
driver.get('https://www.stackoverflow.com')

请确保将.xpi添加到您的项目文件夹中!