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

Фотография

Selenium + Java. Как передать Селениумовскому хрому кукис от моего?


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 10

#1 spkrash

spkrash

    Новый участник

  • Members
  • Pip
  • 4 сообщений
  • ФИО:Павленко Сергей
  • Город:Kyiv


Отправлено 04 января 2017 - 14:48

Добрый день.

Я пытаюсь автоматизировать некоторые действия с почтой Gmail, однако у меня етсь проблемы с авторизацией. Так как Селениум запускает каждый раз новый инстанс браузера без всего, то мне надо как-то передать ему свои кукизы.

 

Я нашел вот такой вот вариант решения, окошко хрома действительно открывается с моими настройками и кукисами, но после инициализации оно виснет на минуту, и до implicitlyWait даже не доходит - падает. Кто-нибуть знает как решить эту проблему? Можно для ФФ, не для хрома.

 

Селениум 3.0.1, хром - свежайший.

      ChromeOptions opt = new ChromeOptions();
      opt.setBinary("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");
      opt.addArguments("--user-data-dir=C:\\Users\\Krash\\AppData\\Local\\Google\\Chrome\\User Data");
      wd = new ChromeDriver(opt);
      wd.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);

  • 0

#2 spkrash

spkrash

    Новый участник

  • Members
  • Pip
  • 4 сообщений
  • ФИО:Павленко Сергей
  • Город:Kyiv


Отправлено 04 января 2017 - 15:09

Текст ошибки на всякий случай

 

org.openqa.selenium.NoSuchSessionException: no such session
  (Driver info: chromedriver=2.25.426923 (0390b88869384d6eb0d5d09729679f934aab9eed),platform=Windows NT 10.0.14393 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 20 milliseconds
Build info: version: '3.0.1', revision: '1969d75', time: '2016-10-18 09:49:13 -0700'
System info: host: 'Bumblebee', ip: '192.168.40.142', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_102'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{message=unknown error: Chrome failed to start: crashed
  (Driver info: chromedriver=2.25.426923 (0390b88869384d6eb0d5d09729679f934aab9eed),platform=Windows NT 10.0.14393 x86_64), platform=ANY}]
Session ID: 49e9f30f6370a8ea5293e91d0806c1e0

	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:216)
	at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:168)
	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:635)
	at org.openqa.selenium.remote.RemoteWebDriver$RemoteWebDriverOptions$RemoteTimeouts.implicitlyWait(RemoteWebDriver.java:822)
	at Tests.SendColdEmail.setUp(SendColdEmail.java:56)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:100)
	at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:515)
	at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:216)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:590)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:811)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1137)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
	at org.testng.TestRunner.privateRun(TestRunner.java:753)
	at org.testng.TestRunner.run(TestRunner.java:607)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:368)
	at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:363)
	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:321)
	at org.testng.SuiteRunner.run(SuiteRunner.java:270)
	at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
	at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
	at org.testng.TestNG.runSuitesSequentially(TestNG.java:1284)
	at org.testng.TestNG.runSuitesLocally(TestNG.java:1209)
	at org.testng.TestNG.runSuites(TestNG.java:1124)
	at org.testng.TestNG.run(TestNG.java:1096)
	at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
	at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:127)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)


  • 0

#3 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 04 января 2017 - 20:48

А какой вообще смысл этих действий с гмайл? Похоже на забивание гвоздей микроскопом
  • 0

#4 sergueik

sergueik

    Постоянный участник

  • Members
  • PipPipPip
  • 166 сообщений
  • ФИО:кузьмин сергей

Отправлено 05 января 2017 - 00:05

        System.err.println("Loading cookies");
        for (Cookie cookie : cookies) {
            try {
                driver.manage().addCookie(cookie);
            } catch (InvalidCookieDomainException e) {
                // ignore the exception
            }
        }
        driver.get(baseURL);
        driver.navigate().refresh();

        System.err.println("Waiting for inbox");



  • 0

#5 appmen

appmen

    Опытный участник

  • Members
  • PipPipPipPip
  • 408 сообщений
  • ФИО:Victor

Отправлено 05 января 2017 - 12:54

Ну, похоже на то, что у вас авторизация привязана к сесии, которая уже закончилась или её нет в этом браузере.

Ек проще логиниться перед всеми вашими действиями в почту и потом делать все действия не открывая новый инстанс браузера?


  • 0

#6 Alex

Alex

    Постоянный участник

  • Members
  • PipPipPip
  • 237 сообщений
  • ФИО:Алексей

Отправлено 06 января 2017 - 09:00

 

Текст ошибки на всякий случай

 

org.openqa.selenium.NoSuchSessionException: no such session
  (Driver info: chromedriver=2.25.426923 (0390b88869384d6eb0d5d09729679f934aab9eed),platform=Windows NT 10.0.14393 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 20 milliseconds
Build info: version: '3.0.1', revision: '1969d75', time: '2016-10-18 09:49:13 -0700'
System info: host: 'Bumblebee', ip: '192.168.40.142', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_102'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{message=unknown error: Chrome failed to start: crashed
  (Driver info: chromedriver=2.25.426923 (0390b88869384d6eb0d5d09729679f934aab9eed),platform=Windows NT 10.0.14393 x86_64), platform=ANY}]
Session ID: 49e9f30f6370a8ea5293e91d0806c1e0

	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:216)
	at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:168)
	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:635)
	at org.openqa.selenium.remote.RemoteWebDriver$RemoteWebDriverOptions$RemoteTimeouts.implicitlyWait(RemoteWebDriver.java:822)
	at Tests.SendColdEmail.setUp(SendColdEmail.java:56)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:100)
	at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:515)
	at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:216)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:590)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:811)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1137)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
	at org.testng.TestRunner.privateRun(TestRunner.java:753)
	at org.testng.TestRunner.run(TestRunner.java:607)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:368)
	at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:363)
	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:321)
	at org.testng.SuiteRunner.run(SuiteRunner.java:270)
	at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
	at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
	at org.testng.TestNG.runSuitesSequentially(TestNG.java:1284)
	at org.testng.TestNG.runSuitesLocally(TestNG.java:1209)
	at org.testng.TestNG.runSuites(TestNG.java:1124)
	at org.testng.TestNG.run(TestNG.java:1096)
	at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
	at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:127)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

1. Как сказали выше, для работы с почтой (если не стоит цели проверить GUI) лучше использовать нативный java клиент (java mail, например) и соответствующий протокол (POP/IMAP/SMTP и т.п.)

2. По самой ошибке. У вас в тексте ошибки указано, что driver crashed. Чаще всего это происходит из-за несовместимости (outdate) компонентов драйвер(chromedriver.exe)/браузер/selenium (клиентская версия selenium java). Учитывая суть ошибки, я бы сделал ставку на то, что не дружат chromedriver.exe и ваша версия браузера chrome.

 

PS. Могут быть проблемы в самом браузере. Попробуйте руками запустить хром с таким параметром запуска


  • 0

#7 spkrash

spkrash

    Новый участник

  • Members
  • Pip
  • 4 сообщений
  • ФИО:Павленко Сергей
  • Город:Kyiv


Отправлено 06 января 2017 - 16:10

А какой вообще смысл этих действий с гмайл? Похоже на забивание гвоздей микроскопом

Мне нужено отсылать письма с конкретного гмейл аккаунта. Я конечно могу попробовать прилинковать его к стороннему мейл-клиенту, и попробовать слать им почту оттуда, но не хотелось бы, так как дальше я все равно буду работать с веб-приложением.

 

 

2. По самой ошибке. У вас в тексте ошибки указано, что driver crashed. Чаще всего это происходит из-за несовместимости (outdate) компонентов драйвер(chromedriver.exe)/браузер/selenium (клиентская версия selenium java). Учитывая суть ошибки, я бы сделал ставку на то, что не дружат chromedriver.exe и ваша версия браузера chrome.

 

PS. Могут быть проблемы в самом браузере. Попробуйте руками запустить хром с таким параметром запуска

Версии браузера, селениума и драйвера - последние. Что до запуска браузера с такими параметрами - после падения драйвера браузер остаётся рабочим, и все кукисы в этом окне подгружены, автоматическая авторизация в гмейл работает. 

 

 

Ек проще логиниться перед всеми вашими действиями в почту и потом делать все действия не открывая новый инстанс браузера?

 

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


  • 0

#8 Freiman

Freiman

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 591 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 06 января 2017 - 16:39

Мне нужено отсылать письма с конкретного гмейл аккаунта. Я конечно могу попробовать прилинковать его к стороннему мейл-клиенту, и попробовать слать им почту оттуда, но не хотелось бы, так как дальше я все равно буду работать с веб-приложением.

Это не сторонний клиент, а java-библиотека. Наверняка так будет сильно проще, тем более вам надо только отправлять.
Стэковерфлоу дает следующие примеры:
http://stackoverflow...ahoo-or-hotmail
  • 0

#9 spkrash

spkrash

    Новый участник

  • Members
  • Pip
  • 4 сообщений
  • ФИО:Павленко Сергей
  • Город:Kyiv


Отправлено 06 января 2017 - 16:44

Спасибо, я попробую завтра, хотя есть у меня подозрение что 2-х факторная авторизация в гмейле этот вариант срежет. Но попробовать всё равно надо, вдруг сработает таки. (Кстати мой верхний вариант я там же на Стековерфлоу нашел, и судя по каментам три года назад он отлично работал)


  • 0

#10 sergueik

sergueik

    Постоянный участник

  • Members
  • PipPipPip
  • 166 сообщений
  • ФИО:кузьмин сергей

Отправлено 06 января 2017 - 20:15

сделаете тест кот. авторизуется (с usernme и password) и сохраняет cookies и убедитесь что вы можете загружайт эти cookies как я привел пример (это был собственно рабочий кусок именно такого теста для googledrive, и ya.ru думаю gmail аналогично работает. 

 

далее cookies на диск и первый credential sensitive тест стереть


  • 0

#11 kashee

kashee

    Новый участник

  • Members
  • Pip
  • 5 сообщений
  • ФИО:Mikhail

Отправлено 08 января 2017 - 08:35

Если просто отправлять почту с конкретного gmail аккаунта, то вам не нужен селениум. Примеры под готовую библиотеку, которые будут работать для вас "из коробки" есть выше, не усложняйте себе жизнь.


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных