Почему Selenium всегда создает временные профили Firefox с помощью веб-драйвера?

Почему Selenium всегда создает временные профили Firefox с помощью веб-драйвера, хотя я сказал использовать существующий?

Согласно этому ответу невозможно запретить Selenium создавать временные профили Firefox с помощью веб-драйвера. Но с chromedriver я могу добиться этого. Итак, почему это отличается для Firefox. Я проверил FirefoxProfile.cs в Selenium repo и обнаружил, что следующий фрагмент кода используется для копирования профиля ---

public void WriteToDisk()
    {
        this.profileDir = GenerateProfileDirectoryName();
        if (!string.IsNullOrEmpty(this.sourceProfileDir))
        {
            FileUtilities.CopyDirectory(this.sourceProfileDir, this.profileDir);
        }
        else
        {
            Directory.CreateDirectory(this.profileDir);
        }

        this.InstallExtensions();
        this.DeleteLockFiles();
        this.DeleteExtensionsCache();
        this.UpdateUserPreferences();
    }

Но для chorme таких вещей нет.

Это потому, что webdriver устанавливает расширение (webdriver.xpi) для связи с firefox, тогда как chromedriver.exe используется для взаимодействия с chrome.

Если это причина, в версии 3.0 веб-драйвер использует geckodriver.exe для связи с firefox. Итак, после версии 3.0 веб-драйвер больше не будет создавать временный профиль для Firefox?

Обновление: Сегодня я поиграл с webdriver версии 3.0+ и обнаружил, что последняя версия с выключенным режимом прежних версий по-прежнему создает временный профиль с именем rust_mozprofile.wUqPXh48avDR. Я предполагаю, что этот временный профиль создается с помощью geckodriver.exe, который написан на Ржавчина

Я использовал chromedriver 3 года назад и не уверен, что chromedriver.exe также создает временный файл такого типа. Ждем ответа от специалистов...


person Rasel    schedule 10.11.2016    source источник


Ответы (2)


Основная причина, по которой драйвер Firefox использует временный профиль, заключается в поддержке случая использования нескольких независимых одновременных экземпляров Firefox. Когда-то, когда Firefox запускался, он удалял сигнальный или блокирующий файл в каталоге профиля и обнаруживал этот файл, если пользователь пытался запустить новый экземпляр Firefox, не позволяя ему это сделать. Независимо от того, проявляет ли Firefox такое поведение или нет, драйвер по-прежнему должен работать с некоторыми более старыми версиями браузера и учитывать это. Решение проекта Selenium для этой проблемы с WebDriver, когда пользователь хочет использовать определенный профиль, состоит в том, чтобы скопировать содержимое этого профиля в новый каталог и запустить Firefox, указав на копию.

Похоже, что реализация Mozilla делает то же самое. Я предполагаю, что по той же причине - для поддержки варианта использования с несколькими экземплярами.

person JimEvans    schedule 10.11.2016
comment
Так что теоретически, если бы у меня было 10 готовых профилей, я мог бы использовать их одновременно для запуска 10 браузеров, не копируя их, верно? - person Rasel; 13.11.2016
comment
Было бы неплохо, если бы селен удалил эти профили из tmp по завершении. - person 111; 29.06.2017
comment
Он удаляет временные папки, если используется quit() - см. stackoverflow.com/a/30447335/5267751 - person user202729; 02.01.2021

Я не знаю, как вы справляетесь с этим с 2017 года, ребята, но я тоже потратил на это некоторое время и нашел удобное решение (Python 3.8 и W10).

Сначала я попытался загрузить профиль в Firefox, который я ранее создал естественным путем, я имею в виду без Selenium. Я настроил на нем прокси, и у меня были записаны файлы cookie (учетная запись зарегистрирована на веб-сайте).

Мне много раз не удавалось загрузить его Selenium, несмотря на все описанные здесь хорошие методы. На самом деле мне так и не удалось его загрузить.

Поэтому я позволил Selenium создать временный профиль, настроил на нем свой прокси и вошел в систему под своим пользователем; затем я набрал это в поле URL:

about:support

Я нашел временную папку, созданную Selenium; папка была:

C:\Users\ADMIN\AppData\Local\Temp\rust_mozprofileilHfxV

Я скопировал/вставил этот путь в свой скрипт Python... и это сработало!

Но работать над чем-то, помещенным во временную папку, рискованно: рано или поздно это будет удалено.

Поэтому я переместил папку rust_mozprofileilHfxV в папку по своему выбору и указал этот путь для опции firefox_profile, и... это тоже сработало!

Похоже, что профили, созданные с помощью Selenium, имеют какой-то отпечаток пальца (потому что сделаны ржавчиной). Если Selenium его не видит, он создает новый профиль.

Еще одна странная вещь, кажется, что некоторые файлы cookie (это файлы cookie?) не загружаются в этом профиле селена. Моя учетная запись все еще зарегистрирована, но я проверил и настроил несколько параметров на страницах; в обычном сеансе в Firefox он сохраняет их, и если я ухожу и возвращаюсь. Но с этим профилем rust_made_by_selenium он их не сохраняет.

Я мог бы справиться с этим, соскоблив, конечно.

Вот это был мой опыт!

person Lyric Tropsed    schedule 04.08.2020