我想用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')这给了我运行时的错误:
回溯(最近一次调用):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'",)
我还尝试给出了分机的路径:
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转义
像下面这样格式化路径字符串也没有帮助。
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?
发布于 2018-10-31 17:00:47
我发现这文章很有帮助。
在创建浏览器之后安装它,而不是将扩展添加到概要文件中:
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添加到项目文件夹中!
发布于 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中查找元数据。
你需要做的是:
# 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()如往常一样))
(祝你好运))
https://stackoverflow.com/questions/49467975
复制相似问题