我保存了所有用于gmail登录的cookie。我在gmail中再次登录时使用此cookie我加载了这个cookie文件,但是我无法使用此cookie登录,例如" 线程中的异常" main" org.openqa.selenium.InvalidCookieDomainException:您只能为当前域设置Cookie "
我的代码如下:
File f = new File("c:\\browser.data");
WebDriver driver = new FirefoxDriver(fb, fp);
driver.get("https://accounts.google.com");
driver.findElement(By.name("Email")).sendKeys("myusername");
driver.findElement(By.name("Passwd")).sendKeys("mypassword");
driver.findElement(By.name("PersistentCookie")).click();
driver.findElement(By.name("signIn")).submit();
Thread.sleep(20000);
try {
f.delete();
f.createNewFile();
try (FileWriter fos = new FileWriter(f); BufferedWriter bos = new BufferedWriter(fos)) {
for (Cookie ck : driver.manage().getCookies()) {
bos.write((ck.getName() + ";" + ck.getValue() + ";" + ck.getDomain() + ";" + ck.getPath() + ";" + ck.getExpiry() + ";" + ck.isSecure()));
bos.newLine();
}
bos.flush();
}
} catch (IOException ex) {
ex.printStackTrace();
}
driver.findElement(By.cssSelector(".gb_V.gbii")).click();
driver.findElement(By.xpath(".//*[@id='gb_71']")).click();
driver.close();
WebDriver driver1 = new FirefoxDriver(pf);
driver1.get("https://accounts.google.com");
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line;
while ((line = br.readLine()) != null) {
StringTokenizer str = new StringTokenizer(line, ";");
while (str.hasMoreTokens()) {
String name = str.nextToken();
String value = str.nextToken();
String domain = str.nextToken();
String path = str.nextToken();
Date expiry = null;
String dt;
if (!(dt=str.nextToken()).equals("null")) {
expiry =new SimpleDateFormat("EEE MMM d H:m:s z y").parse(dt);
}
boolean isSecure = Boolean.valueOf(str.nextToken()).booleanValue();
Cookie ck1 = new Cookie(name, value, domain, path, expiry, isSecure);
System.out.println(domain);
if (domain.equalsIgnoreCase(".google.com")) {
driver1.get("https://accounts.google.com/ ");
driver1.manage().addCookie(ck);
driver1.get("https://accounts.google.com/ ");
}
if (domain.equalsIgnoreCase(".mail.google.com")) {
//driver1.get("http://accounts.google.com");
driver1.get("http://mail.google.com");
Thread.sleep(10000);
driver1.manage().addCookie(ck);
//driver1.get("http://accounts.google.com");
driver1.get("http://mail.google.com");
}
}
}
经过长时间的搜索后,我无法获得任何解决方案或解决方法。
据我所知,当单一登录验证多个域时发生了这种类型的错误。
我真的需要使用cookie登录gmail。这是一个例子,有几个网站,这实现了如何在selenium webdriver中处理这个?
答案 0 :(得分:1)
目前尚不清楚哪个域或哪个Cookie导致了问题。这个简单的代码对我有用:
driver.get("https://accounts.google.com");
Cookie cookie = new Cookie("foo", "bar", ".google.com", "/", new Date(), true);
driver.manage().addCookie(cookie);
driver.get("https://accounts.google.com“);
请注意,Google会在Cookie中返回通配符域。因此,您必须在设置cookie之前打开有效的子域。 GoogleMail还为.mail.google.com
和plus.google.com
设置了Cookie。因此,请在设置之前检查所有Cookie并为每个Cookie打开一个有效域。
这可能会变得棘手,因为谷歌可能会重定向您。例如,如果我正在打开https://mail.google.com/并且我没有登录,则会重定向到https://accounts.google.com。