В новейшей версии 67 Firefox отключены надстройки для личного просмотра. Их можно добавить, следуя этому руководству. https://support.mozilla.org/en-US/kb/extensions-private-browsing
Проблема в том, что даже при использовании этого руководства надстройки не всегда включены в geckodriver.
Это работало в Firefox v66 без проблем.
- Я запустил экземпляр с профилем Firefox по умолчанию (Profile0 из profile.ini) с двумя надстройками (coil и LastPass). Я вижу всплывающие надстройки в течение примерно 2 секунд, а затем исчезают.
- Я включил их вручную в приватном браузере, перейдя по ссылке: addons. Похоже, что если они уже включены в браузере для использования в приватном браузере и не видны в приватном просмотре, изменение разрешений для запрета по-прежнему включает их в приватном просмотре, а затем позволяет им сохранять их включенными. Очень странно.
- Я удалил аддон, закрыл все браузеры, снова запустил скрипт и он заработал в первый раз. Затем при втором запуске вернулись к включенным 2 секундам, а затем исчезли, как упоминалось выше.
- Я проверил временный профиль, созданный в temp, когда geckodriver копирует профиль для потребления. Дополнения включены.
- Вручную открыв частный браузер, вы увидите две надстройки, которые выглядят специфично для 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 будут включены, так как они были разрешены вручную из браузера, и что они будут зарегистрированы, как в обычном режиме.