Перейти к содержимому

sapr71

Регистрация: 07 июн 2019
Offline Активность: 02 сен 2019 13:49
*----

Мои сообщения

В теме: Selenium. Chromedriver. user-data-dir. Java. Как хранить Cookies?

26 июня 2019 - 06:04

Версия chrome: Версия 75.0.3770.100 (Официальная сборка), (64 бит)

 

Работаю с Chromedriver Headless. Мне нужно хранить где-то куки, что бы после закрытия браузера они не терялись. Пробовал использовать chrome с параметром user-data-dir. Все вроде нормально, создает файлы с настройками и куками в указанной папке и пока сервер работает он берет оттуда куки и записывает их. Но после перезагрузки драйвера он перезаписывает файлы и уже не видит старые куки и создает новые. 

 

 

 

Для проверки создал на локальном сервере вот такой скрипт ( http://test-cookies.local/test.php )

<?php setcookie ("TestCookie", 'COOKIES',time()+3600); ?>
<title>КУКИ : <?php print $_COOKIE['TestCookie']; ?> </title>

Выполняю в selenium (java) вот такой код и вижу что куки он не загружает после перезагрузки

System.setProperty("webdriver.chrome.driver", "drivers\\chromedriver.exe");

ChromeOptions options = new ChromeOptions();

options.addArguments("--user-data-dir=c:\\Users\\lexa\\IdeaProjects\\project\\user1\\");

options.setHeadless(true);

WebDriver driver = new ChromeDriver(options);

driver.get("http://test-cookies.local/test.php");

System.out.println(driver.getTitle());

driver.quit();

Подскажите, может есть какие-нибудь другие решения, что бы куки сохранялись или может я что то не так делаю?

 

Так а почему вот этот код то не работает????


В теме: Selenium. Chromedriver. user-data-dir. Java. Как хранить Cookies?

22 июня 2019 - 15:48

Для работы с куками есть специальные методы:

https://seleniumhq.g...er.Options.html

 

Это да, но тогда появляется еще вопрос

 

Как Set<Cookieконвертировать в String?

 

Подскажи как с этим быть:

 

Объявляю переменную Set<Cookie> temp1 и присваиваю ей значение текущих cookie.

//Блок-1

Set<Cookie> temp1;
temp1 = driver.manage().getCookies();

После чего мне нужно сохранить эту информацию в файл, что бы потом в определенный момент я мог ее считать из файла.

//Блок-2

//Сохранение переменной temp1 в файл

//Загрузка в переменную temp2 информации из файла

Объявляю переменную Set<Cookie> temp2 в которую надо считать информацию из файла и после чего задать значение cookie из нее.

//Блок-3

Set<Cookie> temp2;
driver.manage().addCookie(temp2);

Интересует именно Блок-2. Подскажите как сделать. Или как конвертировать Set<Cookie> в String?


В теме: ОШИБКА. Selenium, Facebook WebDriver, PHP.

07 июня 2019 - 08:21

1. Добавьте ожидание (как в той статье)
2. У поля ввода есть более читаемый локатор, например, name="q"

 

 

 

Добавил ожидание, изменил локатор. Выполняю этот код:

<?php
namespace Facebook\WebDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;
require_once('vendor/autoload.php');
$host = 'http://localhost:4444/wd/hub';
$capabilities = DesiredCapabilities::chrome();
$driver = RemoteWebDriver::create($host, $capabilities);
$driver->get('https://www.google.com/');
$driver->wait(5, 1000)->until(WebDriverExpectedCondition::titleContains('Google'));
Sleep(5);
$driver->findElement(WebDriverBy::name('q'))->sendKeys('abc')->click();
print 'ok';
?>

Получаю этот ответ:

 

 

Notice: Undefined index: ELEMENT in C:\xampp\htdocs\vendor\facebook\webdriver\lib\Remote\RemoteWebDriver.php on line 190

Fatal error: Uncaught Facebook\WebDriver\Exception\UnknownCommandException: POST /session/82371d1d85f4a6526df4b2c40afd660a/element//value Build info: version: '3.9.1', revision: '63f7b50', time: '2018-02-07T22:42:28.403Z' System info: host: 'OBR-PC', ip: '192.168.100.104', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_211' Driver info: driver.version: unknown in C:\xampp\htdocs\vendor\facebook\webdriver\lib\Exception\WebDriverException.php:106 Stack trace: #0 C:\xampp\htdocs\vendor\facebook\webdriver\lib\Remote\HttpCommandExecutor.php(326): Facebook\WebDriver\Exception\WebDriverException::throwException(9, 'POST /session/8...', Array) #1 C:\xampp\htdocs\vendor\facebook\webdriver\lib\Remote\RemoteWebDriver.php(547): Facebook\WebDriver\Remote\HttpCommandExecutor->execute(Object(Facebook\WebDriver\Remote\WebDriverCommand)) #2 C:\xampp\htdocs\vendor\facebook\webdriver\lib\Remote\RemoteExecuteMethod.php(40): Facebook\WebDriver\Remote\RemoteWebDriver->execute('sendKeysToEleme...', Array) # in C:\xampp\htdocs\vendor\facebook\webdriver\lib\Exception\WebDriverException.php on line 106

 

 

 

 

Если пишу локатор которого нет например (name="qqqq"):

<?php
namespace Facebook\WebDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;
require_once('vendor/autoload.php');
$host = 'http://localhost:4444/wd/hub';
$capabilities = DesiredCapabilities::chrome();
$driver = RemoteWebDriver::create($host, $capabilities);
$driver->get('https://www.google.com/');
$driver->wait(5, 1000)->until(WebDriverExpectedCondition::titleContains('Google'));
Sleep(5);
$driver->findElement(WebDriverBy::name('qqqq'))->sendKeys('abc')->click();
print 'ok';
?>

То получаю вот такой ответ:

 

 

Fatal error: Uncaught Facebook\WebDriver\Exception\NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":"*[name='qqqq']"} (Session info: chrome=75.0.3770.80) For documentation on this error, please visit: http://seleniumhq.or...ch_element.html Build info: version: '3.9.1', revision: '63f7b50', time: '2018-02-07T22:42:28.403Z' System info: host: 'OBR-PC', ip: '192.168.100.104', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_211' Driver info: driver.version: unknown in C:\xampp\htdocs\vendor\facebook\webdriver\lib\Exception\WebDriverException.php:102 Stack trace: #0 C:\xampp\htdocs\vendor\facebook\webdriver\lib\Remote\HttpCommandExecutor.php(326): Facebook\WebDriver\Exception\WebDriverException::throwException(7, 'no such element...', Array) #1 C:\xampp\htdocs\vendor\facebook\webdriver\lib\Remote\RemoteWebDriver.php(547): Facebook\WebDriver\Remote\HttpCommandExecutor->execute(Object(Facebook\WebDriver\Remote\WebDriverCom in  C:\xampp\htdocs\vendor\facebook\webdriver\lib\Exception\WebDriverException.php on line 102

 

 

 

В обоих случаях открывается браузер, переходит на http://google.com и на этом все.