【发布时间】:2019-10-31 07:37:37
【问题描述】:
最新的 Firefox 版本 67 禁用了隐私浏览插件。这些可以按照本指南添加。 https://support.mozilla.org/en-US/kb/extensions-private-browsing
问题在于,即使使用该指南,geckodriver 下的插件也无法始终启用。
这在 Firefox v66 中运行没有问题。
- 我已经运行了一个带有默认 firefox 配置文件(来自 profile.ini 的 Profile0)和两个附加组件(coil 和 LastPass)的实例。我看到插件弹出大约 2 秒钟,然后消失。
- 我已在私人浏览器中手动启用它们,方法是转到 about: addons。看来,如果它们已经在浏览器中启用以供私人浏览器使用,并且在私人浏览中不可见,则将权限更改为不允许仍然可以在私人浏览中启用它们,然后允许它们保持启用状态。很奇怪。
- 我卸载了一个插件关闭了所有浏览器,再次启动脚本,它第一次工作。然后在第二次运行时,它又回到了上面提到的 2 秒启用然后消失模式。
- 当 geckodriver 复制配置文件以供使用时,我检查了在 temp 下创建的临时配置文件。包括附加组件。
- 手动打开私人浏览器会显示两个加载项,因此它看起来是 geckodriver + firefox v67 特有的。但是,私人浏览器没有让我登录我的插件。
def get_firefox_profile_dir(self):
from pathlib import Path
self.gecko_path = os.path.dirname(__file__)
if sys.platform in ['linux', 'linux2']:
import subprocess
self.ff_gecko = Path(self.gecko_path + '/geckodriver')
bits = 'uname -m'
ver_32_64 = subprocess.getstatusoutput(bits)
cmd = "ls -d /home/$USER/.mozilla/firefox/*.default/"
fp = subprocess.Popen([cmd], shell=True, stdout=subprocess.PIPE)
FF_PRF_DIR = fp.communicate()[0][0:-2]
FF_PRF_DIR_DEFAULT = str(FF_PRF_DIR, 'utf-8')
ff_ext_path = os.path.join(FF_PRF_DIR_DEFAULT, 'extensions')
self.ff_coil_loc = os.path.join(ff_ext_path, self.ff_coil_extId)
ff_coil_enabled = os.path.exists(self.ff_coil_loc)
if ff_coil_enabled:
if 'x86_64' in ver_32_64:
if not self.ff_gecko.is_file():
import wget
self.gecko_targz = 'geckodriver-v0.24.0-linux64.tar.gz'
wget.download(self.gecko_source_linux64, self.gecko_path)
self.file_unzip_tar(self.gecko_path + '/' + self.gecko_targz)
os.remove(self.gecko_path + '/' + self.gecko_targz)
if self.ff_gecko.is_file():
self.data_path = FF_PRF_DIR_DEFAULT
self.gecko = self.ff_gecko
return
if 'i368' in ver_32_64:
if not self.ff_gecko.is_file():
import wget
self.gecko_targz = 'geckodriver-v0.24.0-linux32.tar.gz'
wget.download(self.gecko_source_linux32, self.gecko_path)
self.file_unzip_tar(self.gecko_path + '/' + self.gecko_targz)
os.remove(self.gecko_path + '/' + self.gecko_targz)
if self.ff_gecko.is_file():
self.data_path = FF_PRF_DIR_DEFAULT
self.gecko = self.ff_gecko
return
elif sys.platform == 'win32' or 'nt':
from pathlib import Path
self.gecko = self.gecko_path + "\geckodriver.exe"
mozilla_profile = os.path.join(os.getenv('APPDATA'), r'Mozilla\Firefox')
mozilla_profile_ini = os.path.join(mozilla_profile, r'profiles.ini')
profile = configparser.ConfigParser()
profile.read(mozilla_profile_ini)
FF_PRF_DIR_DEFAULT = os.path.normpath(os.path.join(mozilla_profile, profile.get('Profile0', 'Path')))
ff_ext_path = os.path.join(FF_PRF_DIR_DEFAULT, 'extensions')
self.ff_coil_loc = os.path.join(ff_ext_path, self.ff_coil_extId)
ff_coil_enabled = os.path.exists(self.ff_coil_loc)
if ff_coil_enabled:
ff_gecko = Path(self.gecko)
if ff_gecko.is_file():
self.data_path = FF_PRF_DIR_DEFAULT
return
else:
import wget
wget.download(self.gecko_source_win64)
self.file_zunip('geckodriver-v0.24.0-win64.zip')
if ff_gecko.is_file():
os.remove('geckodriver-v0.24.0-win64.zip')
self.data_path = FF_PRF_DIR_DEFAULT
return
self.get_firefox_profile_dir()
self.driver = webdriver.Firefox(options=self.options, firefox_profile=self.data_path, executable_path=self.gecko)
self.driver.get(self.url) # OPEN URL
我希望 FF 插件能够被启用,因为它们已被浏览器手动允许,并且它们将在正常模式下登录。
【问题讨论】:
标签: python firefox-addon geckodriver selenium-firefoxdriver