Мне нужно пропустить авторизацию при открытии новой страницы. Как я знаю, я должен добавить «авторизированные» куки вместо стандартных куки, и, в соответствии с моей задачей, я хочу сохранить их в файле. Итак, во-первых, я получаю правильные куки с сайта и записываю их в файл.
wDriver.get(link);
logIn(wDriver);
cookies = wDriver.manage().getCookies();
dumpCookies(wDriver.manage().getCookies(), "cookies");
В этой части вход в систему - авторизация, dumpCookies - запись куки в файл, который выглядит как
File file = new File("cookies.data");
file.delete();
file.createNewFile();
FileWriter fileWrite = new FileWriter(file);
BufferedWriter Bwrite = new BufferedWriter(fileWrite);
for (Cookie ck : cookies) {
Bwrite.write((ck.getName() + ";" + ck.getValue() + ";" + ck.getDomain() + ";" + ck.getPath() + ";"
+ ck.getExpiry() + ";" + ck.isSecure()));
Bwrite.newLine();
}
Bwrite.close();
fileWrite.close();
И работает нормально. Более того, я проверил возможность авторизации, добавив правильные куки. После того, как я помещаю в файл команду ie, я делаю следующее
wDriver.close();
wDriver = new ChromeDriver(options);
wDriver.navigate().to(link);
for (Cookie currentCookie : wDriver.manage().getCookies()) {
System.out.println( currentCookie );
}
// add right cookies
for (Cookie cookie : cookies) {
wDriver.manage().addCookie(cookie);
}
// re-visit the page
wDriver.navigate().to(link);
for (Cookie currentCookie: wDriver.manage().getCookies()) {
System.out.println( currentCookie );
}
}
. Я сравнил файлы cookie и они стандартные перед добавлением и вправо после повторного открытия страницы. И я получил страницу авторизации в конце
Мои проблемы начались, когда я пытаюсь авторизоваться, используя куки из моего файла. Это то, что я делаю
wDriver.navigate().to(bet_link);
File file = new File("cookies.data");
FileReader fileReader = new FileReader(file);
BufferedReader Buffreader = new BufferedReader(fileReader);
Set<Cookie> newCookies = new HashSet<>();
while ((strline = Buffreader.readLine()) != null) {
StringTokenizer token = new StringTokenizer(strline, ";");
while (token.hasMoreTokens()) {
String name = token.nextToken();
String value = token.nextToken();
String domain = token.nextToken();
String path = token.nextToken();
Date expiry = null;
String val;
SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd hh:mm:ss zzz yyyy", Locale.ENGLISH);
if (!(val = token.nextToken()).equals("null")) {
expiry = formatter.parse(val);
}
Boolean isSecure = new Boolean(token.nextToken()).booleanValue();
Cookie ck = new Cookie(name, value, domain, path, expiry, isSecure);
newCookies.add(ck);
}
}
for (Cookie currentCookie : newCookies) {
wDriver.manage().addCookie(currentCookie );
}
// cookies after ADD and before navigate.to
for (Cookie cur_cook : wDriver.manage().getCookies()) {
System.out.println( currentCookie );
}
wDriver.navigate().to(link);
// cookies atfer navigate.to
for (Cookie cur_cook : wDriver.manage().getCookies()) {
System.out.println( currentCookie );
}
И вот началось какое-то волшебство c.
Во-первых : куки до navigate.to правильно (как в файл), но файлы cookie после navigate.to являются стандартными. Естественно, я получаю несанкционированную страницу. ПОЧЕМУ? Когда печенье стало стандартом?
Во-вторых : это может помочь с первым вопросом, я думаю. Я не могу установить куки с именами _gat, _ym_isad и _ym_visorc_. Я проверял в l oop, куки с такими именами присутствуют после первой навигации, и когда я собираюсь заменить его на новый из файла, он просто исчезает из куки wDriver ... Я решил пропустить это проблемный и просто не добавил cook ie из файла, если он имеет такие имена, как _gat, _ym_isad и _ym_visorc_ *, и, конечно, это не помогло мне получить страницу авторизации и мои правильные файлы cookie сбрасываются в стандартное состояние после открытия новой страницы вместо правильной работы