为什么Selenium总是使用Web Driver创建临时的Firefox配置文件



为什么Selenium总是使用Web Driver创建临时Firefox配置文件,尽管我告诉它使用现有的一个?

根据这个答案,不可能阻止Selenium使用Web Driver创建临时Firefox配置文件。但是使用chromedriver我可以实现这一点。那么为什么火狐的情况有所不同呢?我检查了Selenium repo的FirefoxProfile.cs,发现以下代码片段用于复制配置文件——

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();
    }

但是对于chrome来说却没有这样的东西。

是因为webdriver安装了一个扩展(webdriver.xpi)来与firefox通信,而chromedriver.exe用于与chrome交互吗?

如果是这个原因,在3.0版本中,webdriver使用geckodriver.exe与firefox通信。那么3.0版本以后webdriver还会为firefox创建临时配置文件吗?

更新:今天我玩了webdriver v 3.0+,发现最新版本的legacymode关闭仍然生成临时配置文件名为rust_mozprofile.wUqPXh48avDR。我的假设是这个临时配置文件是由geckodriver.exe生成的,它是用Rust

编写的

我已经使用chromedriver 3年了,不确定chromedriver.exe也生成这种类型的临时文件。

Firefox驱动程序使用临时配置文件的主要原因是支持同时运行多个独立的Firefox实例的用例。曾经,当Firefox启动时,它会在配置文件目录中放置一个哨兵或锁定文件,如果用户试图启动一个新的Firefox实例,它会检测该文件,阻止他们这样做。无论Firefox是否仍然表现出这种行为,驱动程序仍然必须与一些旧版本的浏览器一起工作,并且必须考虑到这一点。Selenium项目对WebDriver问题的解决方案是,当用户想要使用特定的配置文件时,将该配置文件的内容复制到一个新目录中,并启动指向该副本的Firefox。

听起来Mozilla的实现在很大程度上做了同样的事情。我猜也是出于同样的原因——支持多实例用例。

我不知道自2017年以来你是如何处理它的,但我也花了一些时间在它上面,我找到了一个方便的解决方案(Python 3.8和W10)。

我首先尝试在Firefox中加载我之前"自然"创建的配置文件,我的意思是没有使用Selenium。我在它上面配置了一个代理,并且我记录了cookie(登录网站的帐户)。

尽管这里描述了所有的好方法,我还是失败了很多次。事实上,我从来没有设法加载它。

所以我让Selenium创建一个临时配置文件,配置我的代理并登录我的用户;然后在url字段中输入:

about:support

我找到了由Selenium创建的临时文件夹;文件夹是:

C:UsersADMINAppDataLocalTemprust_mozprofileilHfxV

我在我的python脚本中复制/粘贴了这个路径…

但是处理放在临时文件夹中的东西是有风险的:总有一天它会被删除。

所以我将rust_mozprofileilHfxV文件夹移动到我选择的文件夹中,并以这种方式给firefox_profile选项和…

似乎用Selenium创建的配置文件有某种指纹(因为由rust创建)。如果Selenium没有看到它,它将创建一个新的配置文件。

另一件奇怪的事情,似乎有些cookie(它们是cookie吗?)没有加载到这个selenium配置文件中。我的帐户仍在登录,但我检查并配置了页面上的几个选项;在Firefox的正常会话中,它会保留它们,如果我离开并返回。但是有了这种"硒锈"配置文件,它不保留它们。

我当然可以通过刮来处理。

这是我的经验

相关内容

最新更新