为什么Selenium总是使用Web驱动程序创建临时Firefox配置文件?

时间:2016-11-10 07:05:00

标签: selenium firefox webdriver selenium-chromedriver geckodriver

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

根据this answer,无法阻止Selenium使用Web Driver创建临时Firefox配置文件。但是对于chromedriver,我可以做到这一点。那么为什么它与Firefox有所不同。我检查了Selenium repo FirefoxProfile.cs ,发现以下代码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用于与chrome进行交互。

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

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

编写的

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

2 个答案:

答案 0 :(得分:1)

Firefox驱动程序使用临时配置文件的主要原因是支持运行多个独立的Firefox同时实例的用例。有一段时间,当Firefox启动时,它会在配置文件目录中删除一个标记或锁定文件,并且如果用户试图启动新的Firefox实例,则会检测到该文件,从而阻止它们这样做。无论Firefox是否仍然出现此行为,驱动程序仍然必须使用某些旧版本的浏览器,并且必须考虑它。当用户想要使用特定配置文件时,Selenium项目使用WebDriver解决该问题的方法是将该配置文件的内容复制到新目录,然后启动指向该副本的Firefox。

听起来Mozilla的实现大致相同。我猜这是出于同样的原因 - 支持多实例用例。

答案 1 :(得分:0)

自2017年以来,我不怎么处理它,但是我也花了一些时间,发现了一个方便的解决方案(Python 3.8和W10)。

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

尽管这里描述了所有商品方法,但我多次加载Selenium还是失败了。 实际上,我从未设法加载它。

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

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”配置文件,不会保留它们。

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

这是我的经验!