簡體   English   中英

為什么 Selenium 總是使用 Web 驅動程序創建臨時的 Firefox 配置文件?

[英]Why Selenium always create temporary Firefox Profiles using Web Driver?

為什么 Selenium 總是使用 Web 驅動程序創建臨時的 Firefox 配置文件,盡管我告訴它使用現有的配置文件?

根據這個答案,不可能阻止 Selenium 使用 Web 驅動程序創建臨時的 Firefox 配置文件。 但是使用 chromedriver 我可以實現這一點。 那么為什么它與 Firefox 不同。 我檢查了Selenium repoFirefoxProfile.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 的臨時配置文件。 我的假設是這個臨時配置文件是由用Rust編寫的geckodriver.exe生成的

我在 3 年前使用過 chromedriver,但不確定chromedriver.exe 是否也會生成這種類型的臨時文件。 期待專家解答...

Firefox 驅動程序使用臨時配置文件的主要原因是支持運行多個獨立的 Firefox 並發實例的用例。 有一次,當 Firefox 啟動時,它會在配置文件目錄中放置一個哨兵或鎖定文件,如果用戶嘗試啟動一個新的 Firefox 實例,它會檢測到該文件,阻止他們這樣做。 不管 Firefox 是否仍然表現出這種行為,驅動程序仍然必須使用一些舊版本的瀏覽器,並且必須考慮到它。 Selenium 項目對 WebDriver 的這個問題的解決方案是,當用戶想要使用特定的配置文件時,將該配置文件的內容復制到一個新目錄,然后啟動指向該副本的 Firefox。

聽起來 Mozilla 的實現在很大程度上做了同樣的事情。 我猜這是出於同樣的原因 - 支持多實例用例。

自 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”配置文件,它不會保留它們。

我當然可以通過刮擦來處理它。

這是我的經驗!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM