0

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

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

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 используется для взаимодействия с хром.

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

Update: Сегодня я играл с WebDriver об 3.0+ и обнаружили, что последняя версия с legacymode выключения продолжает генерировать временный профиль с именем, как rust_mozprofile.wUqPXh48avDR. Мое предположение это временный профиль создается geckodriver.exe, который написан в Rust

я использовал chromedriver 3 года назад и не уверен, что chromedriver.exe также генерирует такой тип временного файла. Ожидание ответа экспертов ...

ответ

1

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

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

+0

Итак, теоретически, если бы у меня было 10 предварительно подготовленных профилей, я мог бы использовать их одновременно для запуска 10 браузеров без их копирования, верно? – Rasel

+1

Было бы неплохо, если бы селен удалял эти профили из tmp при завершении. – glyph