【问题标题】:selenium - unable to add browsec extension to firefox profileselenium - 无法将browsec扩展添加到firefox配置文件
【发布时间】:2018-09-03 05:04:40
【问题描述】:

我想用 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\site-packages\selenium\webdriver\firefox\firefox_profile .py”,第 346 行,在 _addon_details with open(os.path.join(addon_path, 'install.rdf'), 'r') as f: FileNotFoundError: [Errno 2] No such file or directory: 'C:\Users\Usr\AppD ata\Local\Temp\tmp0hny31u3.browsec@browsec.com.xpi\install.rdf'

在处理上述异常的过程中,又发生了一个异常:

Traceback(最近一次调用最后一次):文件“test.py”,第 7 行,在 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) 文件“C:\Python36\lib\site-packages\selenium\webdriver\firefox\firefox_profile .py”,第 274 行,在 _install_extension 中 addon_details = self._addon_details(addon) 文件“C:\Python36\lib\site-packages\selenium\webdriver\firefox\firefox_profile .py”,第 351 行,在 _addon_details 引发 AddonFormatError(str(e), sys.exc_info()[2]) selenium.webdriver.firefox.firefox_profile.AddonFormatError: ("[Errno 2]没有这样的文件或目录: 'C:\\Users\\Usr\\AppData\\Local\\Temp\\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:\Users\Hassan\AppData\Roaming\Mozilla\Firefox\Profi les\n5jwlj9l.default\extensions\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")

我得到以下信息:

Traceback(最近一次调用最后一次):文件“test.py”,第 7 行,在 profile.add_extension(r"C:\Users\Hassan\AppData\Roaming\Mozilla\Firefox\Prof iles\n5jwlj9l.default\extensions\browsec@browsec.com.xpi") 文件 "C:\Python36\lib\site-packages\selenium\webdriver\firefox\firefox_profile .py”,第 95 行,在 add_extension 中 self._install_extension(extension) 文件“C:\Python36\lib\site-packages\selenium\webdriver\firefox\firefox_profile .py”,第 274 行,在 _install_extension 中 addon_details = self._addon_details(addon) 文件“C:\Python36\lib\site-packages\selenium\webdriver\firefox\firefox_profile .py”,第 351 行,在 _addon_details 引发 AddonFormatError(str(e), sys.exc_info()[2]) selenium.webdriver.firefox.firefox_profile.AddonFormatError: ("[Errno 2]没有这样的文件或目录: 'C:\\Users\\usr\\AppData\\Local\\Temp\\tmp1he 0fym_.browsec@browsec.com.xpi\\install.rdf'",)

如何配置 selenium 以在默认情况下启用 browsec 运行 firefox?

【问题讨论】:

    标签: python selenium selenium-webdriver


    【解决方案1】:

    我发现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 添加到您的项目文件夹中!

    【讨论】:

    • 提示:转到 Firefox 附加组件页面。找到您要使用的插件。右键单击“+ 添加到 Firefox”按钮,然后单击“将链接另存为”。然后,您只需将其放入正确的文件夹并按照此处所述引用它。
    【解决方案2】:

    对不起我的英语))

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

    Here作者写了一个类,稍微改变了扩展的连接功能,selenium在manifest.json中查找元数据,而不是install.rdf。

    你需要做什么:

    # 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()
    

    像往常一样)))

    祝你好运)))

    【讨论】:

    • 对于那些将 PythonAnywhere 与 Firefox 17.0 版和 Selenium v​​2 一起使用的用户。这对你有用!
    【解决方案3】:

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

    "firefox.exe -P" 
    

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

    【讨论】:

      猜你喜欢
      • 2016-09-19
      • 2019-12-23
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      • 2016-06-25
      • 1970-01-01
      • 2013-09-30
      • 1970-01-01
      相关资源
      最近更新 更多