您可以创建Firefox和其他浏览器配置文件并使用它。这种情况下的所有cookie都将保存在此配置文件中。
您可以在浏览器打开后添加硬编码的cookies。但在这种情况下,它们将是“静态的”(每次会话都是一样的)
如果您只需要检查登录/注销,可以手动将cookie保存到某些变量,从webdriver删除cookie,刷新页面,添加cookies返回。
最简单的方法是使用序列化。(创建自己的cookies类别并将其保存/加载到/从硬盘驱动器)这是最好的选择!
您可以在浏览器关闭并加载驱动程序启动之前编写代码以将cookie保存到xml文件。这是使用Linq在C#中实现此类功能的示例:
。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Linq;
namespace Ifrit
{
public class CookiesManager
{
XDocument xmlDoc;
string xml_path;
public CookiesManager()
{
xml_path = ParamsLib.BrwsrOptions.BrowserCookiesFile;
xmlDoc = new XDocument();
if (File.Exists(xml_path))
{
xmlDoc = XDocument.Load(xml_path);
}
else
{
var xmlBodyNode = new XElement("body","");
var xmlCList = new XElement("cookies_list","");
xmlBodyNode.Add(xmlCList);
xmlBodyNode.Save(xml_path);
xmlDoc = XDocument.Load(xml_path);
}
}
public List<MyCookie> GetCookiesForUser(string user_name)
{
List<MyCookie> cookiesList = new List<MyCookie>();
try
{
cookiesList = (from e in xmlDoc.Root.Elements("cookies_list")
let cookie = e.Element("cookie")
where (string)cookie.Attribute("user_name") == user_name
select new MyCookie
{
name = (string)cookie.Attribute("c_name"),
value = (string)cookie.Attribute("c_value"),
domain = (string)cookie.Attribute("c_domain"),
path = (string)cookie.Attribute("c_path"),
expiries = (string)cookie.Attribute("c_expiries"),
secure = (string)cookie.Attribute("c_secure"),
}).ToList();
}
catch
{ }
return cookiesList;
}
public void AddCookiesForUser(string username, string cookieName, string cookieValue, string domainName, string path, string expiries, string secure)
{
var xmlNode = new XElement("cookie", new XAttribute("user_name", username),
new XAttribute("c_name", cookieName),
new XAttribute("c_value", cookieValue),
new XAttribute("c_domain", domainName),
new XAttribute("c_path", path),
new XAttribute("c_expiries", expiries),
new XAttribute("c_secure", secure)
);
xmlDoc.Element("body").Element("cookies_list").Add(xmlNode);
}
public void Save()
{
xmlDoc.Save(xml_path);
}
public void removeCookieForUser(string username)
{
try
{
xmlDoc.Element("body").Element("cookies_list").Descendants("cookie")
.Where(x => (string)x.Attribute("user_name") == username)
.Remove();
}
catch
{
}
}
public class MyCookie
{
public string name { get; set; }
public string value { get; set; }
public string domain { get; set; }
public string path { get; set; }
public string expiries { get; set; }
public string secure { get; set; }
}
}
}
在这种情况下,有可能其在需要时从通过的myCookie附加功能,包装和负载饼干保存在XML和加载所有的cookie的cookie。
顺便说一句,这是例如饼干XML文件:
<?xml version="1.0" encoding="utf-8"?>
<body>
<cookies_list>
<cookie user_name="SomeName" c_name="6a64d0796e530a04069945d05c4074ca" c_value="yes" c_domain="www.marathonsportsbook.com" c_path="/" c_expiries="17.05.2057 15:41:44" c_secure="True" />
<cookie user_name="SomeName" c_name="2b132c80be5271bcd9a0dddcc2f12c18" c_value="yes" c_domain="www.marathonsportsbook.com" c_path="/" c_expiries="17.05.2057 15:41:44" c_secure="True" />
<cookie user_name="SomeName" c_name="PUNTER_KEY" c_value="A81B639C8F69931DAAD24DE4A8972632" c_domain=".marathonsportsbook.com" c_path="/" c_expiries="27.05.2016 15:41:44" c_secure="True" />
<cookie user_name="SomeName" c_name="JSESSIONID" c_value="web2~F8D01B04BDE8C9702A1795521E06B218" c_domain="www.marathonsportsbook.com" c_path="/" c_expiries="28.05.2015 15:46:16" c_secure="True" />
<cookie user_name="SomeName" c_name="afterLoginRedirectPath" c_value=""https://www.marathonsportsbook.com/en/"" c_domain="www.marathonsportsbook.com" c_path="/" c_expiries="28.05.2015 15:46:16" c_secure="True" />
</cookies_list>
</body>
USER_NAME = “SomeName” - 是cookie的配置文件名称
可能重复使用的cookie。请参阅[本](http://stackoverflow.com/questions/30292025/selenium-trying-to-log-in-with-cookies-can-only-set-cookies-for-current-doma) – Saifur
感谢Saifur。我编辑了我的代码,但没有得到例外 - 您只能将Cookie设置为当前域。 –