我有以下情况:
我有一个C#WPF程序,我尝试同时访问不同的网站并从中收集数据。
网站A(www.example.com)有一个登录表单,登录后会显示许多链接,例如www.example.com?redir=abc
我的所作所为:
问题是,我在项目中的另一个Thread中运行了另一个FirefoxDriver实例2。
在本实例2中,我访问之前收集的链接,并希望打开它们。
问题是,为了访问它们(它们是重定向),我需要再次登录到网站A. 当我登录时,实例1上的会话结束,所以我需要再次登录等等,所以有效的实例是"窃取"彼此的会议。 (我想更多地扩展它以使实例3,4 ......所以这会使问题更严重)。
显然我的问题是实例1和实例2没有共享同一个会话。
我找到解决问题的可能性:
因此,我在问,有人建议我应该如何设计这个?
感谢您的帮助。
答案 0 :(得分:5)
首先,我认为有一种方法可以在两个实例之间共享一个配置文件,但WebDriver似乎并非如此。我能够让它工作的唯一方法是将cookie从一个实例复制到另一个实例:
var driver1 = new FirefoxDriver();
driver1.Navigate().GoToUrl("http://www.html-kit.com/tools/cookietester/");
driver1.FindElementByXPath("//input[@value=\"Set Test Cookie\"]").Click();
var driver2 = new FirefoxDriver();
driver2.Navigate().GoToUrl("http://www.html-kit.com/tools/cookietester/");
// Copy cookies from one driver to the other
foreach (Cookie c in driver1.Manage().Cookies.AllCookies)
{
driver2.Manage().Cookies.AddCookie(new Cookie(c.Name, c.Value, c.Domain.TrimStart('.'), c.Path, c.Expiry));
}
driver2.Navigate().Refresh();
只有我必须解决的问题是,如果您不在同一个域中,WebDriver(或Firefox)不允许您设置cookie。因此需要一些小技巧:转到同一域上的URL并刷新或稍后导航到目标URL。所以在你的情况下:
一点情景。我希望它有效。祝你好运。