4

既存のものを使用するように指示したにもかかわらず、Selenium が常に Web Driver を使用して一時的な Firefox プロファイルを作成するのはなぜですか?

この回答によると、 Selenium が Web Driver を使用して一時的な Firefox プロファイルを作成するのを止めることはできません。しかし、chromedriver を使用すると、これを実現できます。では、なぜ Firefox とは違うのでしょうか。Selenium リポジトリの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();
    }

しかし、クロムにはそのようなことはありません。

これは、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

2017 年以来、あなたがどのように処理しているかはわかりませんが、私もそれに時間を費やし、便利な解決策 (Python 3.8 および W10) を見つけました。

私は最初に、以前に「自然に」作成したプロファイルを Firefox にロードしようとしました。つまり、Selenium を使用していません。プロキシを構成し、Cookie を記録しました (Web サイトにログインしたアカウント)。

ここで説明されているすべての適切な方法にもかかわらず、Selenium でロードするのに何度も失敗しました。実際、私はそれをロードすることができませんでした。

そのため、Selenium に一時的なプロファイルを作成させ、その上にプロキシを構成し、ユーザーにログインさせました。次に、これを url フィールドに入力しました。

about:support

Selenium によって作成された一時フォルダーが見つかりました。フォルダーは次のとおりです。

C:\Users\ADMIN\AppData\Local\Temp\rust_mozprofileilHfxV

このパスをPythonスクリプトにコピー/貼り付けました...そしてうまくいきました!

しかし、一時フォルダーに置かれたもので作業するのは危険です。いつの日か削除されます。

だから私rust_mozprofileilHfxVは自分の選択したフォルダにフォルダを移動し、この方法を firefox_profile オプションに与えました...それもうまくいきました!

Selenium で作成されたプロファイルには、ある種のフィンガープリントがあるようです (錆によって作成されたため)。Selenium がそれを認識しない場合、新しいプロファイルが作成されます。

もう 1 つの奇妙なことですが、一部の Cookie (Cookie ですか?) がこの Selenium プロファイル内に読み込まれていないようです。アカウントはまだログインしていますが、ページのいくつかのオプションを確認して構成しました。Firefoxの通常のセッションでは、それらを保持し、離れて戻ってきても. しかし、この「rust_made_by_selenium」プロファイルでは、それらは保持されません。

もちろんスクレイピングで対応できました。

これが私の経験でした!

于 2020-08-04T13:24:04.017 に答える