私はセレニティウェブドライバコードをわずかに変更して、ドライバサービスを別のユーザの下で起動できるようにしています。 githubのは、以下のとおりです。セレンのWebドライバが別のユーザとして実行中ユーザのプロフィール/セッションが取得されない
ユーザーの詳細はウェブドライバをインスタンス化する呼び出しで私の外部コードから渡されpublic void Start()
{
this.driverServiceProcess = new Process();
if (this.user != null)
{
this.driverServiceProcess.StartInfo.UserName = user.Name;
this.driverServiceProcess.StartInfo.Password = user.Password;
this.driverServiceProcess.StartInfo.Domain = user.Domain;
}
this.driverServiceProcess.StartInfo.FileName = Path.Combine(this.driverServicePath, this.driverServiceExecutableName);
this.driverServiceProcess.StartInfo.Arguments = this.CommandLineArguments;
this.driverServiceProcess.StartInfo.UseShellExecute = false;
this.driverServiceProcess.StartInfo.CreateNoWindow = this.hideCommandPromptWindow;
this.driverServiceProcess.Start();
bool serviceAvailable = this.WaitForServiceInitialization();
if (!serviceAvailable)
{
string msg = "Cannot start the driver service on " + this.ServiceUrl;
throw new WebDriverException(msg);
}
}
:
new ChromeDriver(userName, password, domain);
または
new InternetExplorerDriver(ieOptions, userName, password, domain);
を介して伝播される。
これは、必要なユーザー資格情報で正常にクロムドライバを起動しますが、IEに問題があります。
さらに、クロムドライバは、特定のユーザーとして手動で起動されたクロムと同じ動作をしません(つまり、セレンドライバを使用しない)。具体的には、NTLMチャレンジに対するユーザー資格情報の自動渡しは発生しません。
私は希望のユーザーとして実行されている対話型のセッションを持っている場合、セレンから起動時に期待されているようなブラウザの機能のすべてを(単にコマンドラインからrunas /user:<theUser> cmd.exe
を使用し、オープンセッションを残す)ことを発見しましたNTLMチャレンジに自動的に応答するなど、Webドライバを使用します。
Webドライバを作成する前にProcess.Start()
を使用して、目的のユーザーとしてcmd.exeを起動すると、これは機能しません。
私の質問はこれです:コマンドラインからプロセスのインタラクティブセッションを起動に比べて(Process.Start()
を使用して)プログラム的にプロセスを起動する程度異なっている
何?
コードをコマンドラインから起動してセッションを起動する効果を忠実に再現できるため、プロセスを自動化して自分のWebドライバを欲しいものにすることができますか?
注:私は(hereとhereを示唆した通り)の.NET偽装を使用してwebdriverをを起動するのではなく、別のユーザーの下でのドライバサービスを実行するために、セレンコードを変更しようとしたが、サーバにドライバから送信される要求はすべてでした(hereを参照してください)を参照してください。
偽装にこれを使用していますか? – Zenuka
私はそのプロジェクトではもはや働いていませんが、前回はそのコードをまだ使用していました。 – MikeW