首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >selenium -无法在firefox配置文件中添加browsec扩展

selenium -无法在firefox配置文件中添加browsec扩展
EN

Stack Overflow用户
提问于 2018-03-24 17:55:04
回答 2查看 1.9K关注 0票数 3

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

我无法在启用外接程序的情况下使用selenium启动firefox。以下是我尝试过的:

代码语言:javascript
复制
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()

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

代码语言:javascript
复制
profile.add_extension('browsec@browsec.com.xpi')

这给了我运行时的错误:

回溯(最近一次调用):file "C:\Python36\lib\site-packages\selenium\webdriver\firefox\firefox_profile .py",第346行,在_addon_details with open(os.path.join(addon_path,'install.rdf'),'r')中作为f: FileNotFoundError: Errno 2没有这样的文件或目录:‘C:\Usr\Usr\AppD ata\Local\Temp\tmp0hny31u3.browsec@browsec.com.xpi\install.rdf’ 在处理上述异常的过程中,发生了另一个异常: 追溯(最近一次调用):profile.add_extension("browsec@browsec.com.xpi") "C:\Python36\lib\site-packages\selenium\webdriver\firefox\firefox_profile .py中的文件"test.py",第7行,add_extension self._install_extension(扩展名) "C:\Python36\lib\site-packages\selenium\webdriver\firefox\firefox_profile .py中的第95行,第274行,在_install_extension addon_details = self._addon_details(addon) File .py中,第351行,在_addon_details raise (str(E),selenium.webdriver.firefox.firefox_profile.AddonFormatError:() sys.exc_info()2) ("Errno 2没有这样的文件或目录:‘C:\Usr\Usr\AppData\Local\Temp\tmp0hn y31u3.browsec@browsec.com.xpi\install.rdf'",)

我还尝试给出了分机的路径:

代码语言:javascript
复制
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错误)‘独角形转义’编解码器不能解码位元组n2-3:截断\UXXXXXXXX转义

像下面这样格式化路径字符串也没有帮助。

代码语言:javascript
复制
profile.add_extension(r"C:\Users\urs\AppData\Roaming\Mozilla\Firefox\Profiles\abc.default\extensions\browsec@browsec.com.xpi")

我得到以下信息:

追溯(最近一次调用):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中的文件"test.py",第7行,第95行,在add_extension self._install_extension(扩展名) File .py",第274行,在_install_extension addon_details = self._addon_details(addon) File "C:\Python36\lib\site-packages\selenium\webdriver\firefox\firefox_profile .py“中,第351行,在_addon_details raise (str(E))中,selenium.webdriver.firefox.firefox_profile.AddonFormatError:() sys.exc_info()2) ("Errno 2没有这样的文件或目录:‘C:\usr\usr\AppData\Local\Temp\tmp1he 0fym_.browsec@browsec.com.xpi\install.rdf'",)

如何配置selenium,使其在默认情况下启用了浏览器来运行firefox?

EN

回答 2

Stack Overflow用户

发布于 2018-10-31 17:00:47

我发现文章很有帮助。

在创建浏览器之后安装它,而不是将扩展添加到概要文件中:

代码语言:javascript
复制
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添加到项目文件夹中!

票数 3
EN

Stack Overflow用户

发布于 2018-08-02 18:55:01

(对不起我的英语)

最有可能的情况是,您正在使用Firefox的新版本(量子版-来自第57版)。在较新版本的Firefox中,扩展元数据不是存储在install.rdf文件中,而是存储在manifest.json文件中。Selenium还不知道这一点(在3.11版中,只在3.14中学习)。因此,当尝试连接扩展时,它会查找习惯install.rdf。

这里作者编写了一个类,它轻微地改变了扩展的连接函数,而不是install.rdf,selenium在manifest.json中查找元数据。

你需要做的是:

代码语言:javascript
复制
# 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()

如往常一样))

(祝你好运))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49467975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档