4

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

根据这个答案,无法阻止 Selenium 使用 Web 驱动程序创建临时 Firefox 配置文件。但是使用 chromedriver 我可以做到这一点。那么为什么它对于 Firefox 是不同的。我检查了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();
    }

但是对于chorme来说没有这样的事情。

是不是因为 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的临时配置文件。我的假设是这个临时配置文件是由用Rust编写的geckodriver.exe生成的

3 年前我使用过 chromedriver,但不确定chromedriver.exe 是否也会生成这种类型的临时文件。期待专家的解答...

4

2 回答 2

2

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

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

于 2016-11-10T12:31:18.133 回答
2

自 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 吗?)没有加载到这个 selenium 配置文件中。我的帐户仍处于登录状态,但我在页面上检查并配置了几个选项;在 Firefox 的正常会话中,它会保留它们,如果我离开并回来。但是对于这个“rust_made_by_selenium”配置文件,它不会保留它们。

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

这是我的经验!

于 2020-08-04T13:24:04.017 回答