我想用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?
答案 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添加到您的项目文件夹中!