Я сканирую защищенный веб-сайт, который блокирует меня всякий раз, когда я перезапускаю приложение-искатель (мне нужно изменить IP как трюк). Я решил эту проблему, используя профиль пользователя по умолчанию в chrome-драйвере вроде этого (я использую С# прямо сейчас, но при необходимости я могу переключиться на java):
ChromeOptions options = new ChromeOptions();
options.AddArguments($"user-data-dir=C:/Users/{Environment.UserName}/AppData/Local/Google/Chrome/User Data/Default");
Сохраняет все сеансы и файлы cookie и восстанавливает их при перезагрузке моего приложения. Все работает так, как ожидалось.
Теперь мне нужно изменить мой webdriver на PhantomJS по некоторым причинам.
Мой вопрос. Как я могу сделать этот сценарий возможным с помощью PhantomJS: войти в учетную запись (например, gmail или facebook), закрыть мое приложение и драйвер, найти себя вошедшим в систему при следующем запуске приложения и драйвера. Другими словами, как я могу использовать один и тот же сеанс для PhantomJS при каждом запуске?
Попробуйте 1 (в С#):
После выполнения какого-то поиска я обнаружил, что это можно сделать, используя локальные файлы хранилища и файлы файлов cookie в PhantomJS. Теперь проблема в том, что локальный путь хранения всегда пуст, и там ничего не сохраняется (я перемещаюсь по нескольким сайтам, но все еще пуст), поэтому я не могу использовать сеанс из предыдущего выполнения. Мой код для установки файла локального хранилища и файлов cookie прост, как показано ниже:
PhantomJSDriverService service = PhantomJSDriverService.CreateDefaultService();
service.LocalStoragePath = Application.StartupPath + "\\default";
service.CookiesFile = Application.StartupPath + "\\default\\Cookies";
IWebDriver driver = new PhantomJSDriver(service);
Что не так с моим подходом?
Попробуйте 2 (в С#):
Основываясь на ответах @SiKing на ответы и комментарии, я изменил код ниже (используя AddArgument), но каталог все еще пуст:
string localStoragePath = Path.Combine(Path.GetTempPath(),"PhantomLocalStorage-");
if (!Directory.Exists(localStoragePath))
{
Directory.CreateDirectory(localStoragePath);
}
PhantomJSDriverService service = PhantomJSDriverService.CreateDefaultService();
service.AddArgument("--local-storage-quota=5000");
service.AddArgument("--local-storage-path=" + localStoragePath);
IWebDriver driver = new PhantomJSDriver(service);
Попробуйте 3 (в java):
Каталог по-прежнему пуст:
DesiredCapabilities capabilities = DesiredCapabilities.phantomjs();
List<String> cliArgs = new ArrayList<String>();
Path local_storage_path = Paths.get(System.getProperty("java.io.tmpdir") + "PhantomLocalStorage-");
if (Files.notExists(local_storage_path)) {
try {
Files.createDirectory(local_storage_path);
}
catch (IOException e) {
JOptionPane.showConfirmDialog(null, "Can Not Create Path");
}
}
cliArgs.add("--local-storage-quota=5000");
cliArgs.add("--local-storage-path=" + local_storage_path.toString());
capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, cliArgs);
WebDriver driver = new PhantomJSDriver(capabilities);