Приватный просмотр Firefox v67 с помощью geckodriver не всегда включает дополнения - PullRequest
0 голосов
/ 17 июня 2019

В новейшей версии 67 Firefox отключены надстройки для личного просмотра. Их можно добавить, следуя этому руководству. https://support.mozilla.org/en-US/kb/extensions-private-browsing

Проблема в том, что даже при использовании этого руководства надстройки не всегда включены в geckodriver.

Это работало в Firefox v66 без проблем.

  1. Я запустил экземпляр с профилем Firefox по умолчанию (Profile0 из profile.ini) с двумя надстройками (coil и LastPass). Я вижу всплывающие надстройки в течение примерно 2 секунд, а затем исчезают.
  2. Я включил их вручную в приватном браузере, перейдя по ссылке: addons. Похоже, что если они уже включены в браузере для использования в приватном браузере и не видны в приватном просмотре, изменение разрешений для запрета по-прежнему включает их в приватном просмотре, а затем позволяет им сохранять их включенными. Очень странно.
  3. Я удалил аддон, закрыл все браузеры, снова запустил скрипт и он заработал в первый раз. Затем при втором запуске вернулись к включенным 2 секундам, а затем исчезли, как упоминалось выше.
  4. Я проверил временный профиль, созданный в temp, когда geckodriver копирует профиль для потребления. Дополнения включены.
  5. Вручную открыв частный браузер, вы увидите две надстройки, которые выглядят специфично для 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 будут включены, так как они были разрешены вручную из браузера, и что они будут зарегистрированы, как в обычном режиме.

1 Ответ

0 голосов
/ 18 июня 2019

Похоже, что основная проблема была связана с обновлением до v67, и некоторые неизвестные элементы в профиле сломались. Сброс профиля устранил проблему.

https://support.mozilla.org/en-US/kb/refresh-firefox-reset-add-ons-and-settings

ОБНОВЛЕНИЕ: после дальнейшего тестирования я вижу, что он показывает кратковременную стабильность и что расширения динамически загружаются и пропускают (больше пропускают). Другими словами, после сброса профиля аддоны работают первые несколько раз, а затем уже не загружаются с селеном

...