2014-05-09 4 views
2

Я сохраняю все файлы cookie для входа в Gmail. Я использую эти куки, когда я снова вхожу в gmail. Я загружаю этот файл cookie, но я не могу войти в это исключение cookie, например «Исключение из потока« main »org.openqa.selenium.InvalidCookieDomainException: вы можете устанавливать только файлы cookie для текущий домен "Обработка файлов нескольких доменов с использованием selenium webdriver

Мой код выглядит следующим образом:

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"); 
       } 

     } 
    } 

После получения долгих поисков я не могу получить какое-либо решение или обходной путь для этого.

Как я понимаю, этот тип ошибки произошел при однократном входе в систему для проверки нескольких доменов.

Мне действительно нужно зайти в gmail с помощью файлов cookie. Это пример того, что есть несколько сайтов, где это реализуется тогда, как мы можем справиться с этим в selenium webdriver?

ответ

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 также устанавливает файлы cookie для .mail.google.com и plus.google.com. Поэтому проверьте все файлы cookie и откройте действительный домен для каждого файла cookie перед его настройкой.

Это может быть сложно, потому что Google может перенаправить вас. Например, если я открываю https://mail.google.com/, и я не вошел в систему. Я получаю перенаправление на https://accounts.google.com.

+0

спасибо за вашу помощь .... Я изменяю свой заданный вопрос. Я добавляю больше кода, с помощью которого вы можете понять, что я делаю на самом деле. Здесь вы можете понять, что основной создатель проблемы - это .main.google.com, пожалуйста, код и исправить меня, если я сделал беспорядок в коде. – saba

+0

Если вы просматриваете мой код, то видите, что я вхожу в свой gmail, добавляю все файлы cookie в файл и закрываю браузер, а затем запускаю браузер и подаю файлы cookie из файла ...... Я также делаю это с помощью facebook и входа в систему в facebook с помощью файлов cookie, почему бы и не для gmail, вы можете сказать многодоменную проблему, но как я могу ее решить, пожалуйста, помогите мне. – saba

+1

Пробовал свой код и не работал. Вызов '' 'mail.google.com''' перенаправляет меня на' '' 'accounts.google.com''', поэтому невозможно установить cookie с селеном. Но со всеми файлами cookie с '' '.google.com''' вы вошли в систему и можете получить доступ, например. https://www.google.com/settings/personalinfo. Я думаю, вам нужен токен-токен, чтобы перейти к другим приложениям, поэтому, возможно, [это помогает] (https://developers.google.com/accounts/docs/OAuth2Login). – lefloh

Смежные вопросы