title: How to get the webdriver object using just the session ID Or cookies of existing webdriver session
body: <p>I have a situation where webdriver object is hide in a wrapper in dependency project and I can only able to retrieve <strong>session id in string format and return driver.manage()/cookies from those functions.</strong></p>
  
  <p>Now I am trying to use this session Id and pass it to my webdriver reference variable so I can extend my requirement.</p>
  
  <p>I have also find an reference of same as below:</p>
  
  <p><a href="https://tarunlalwani.com/post/reusing-existing-browser-session-selenium-java/" rel="nofollow noreferrer">https://tarunlalwani.com/post/reusing-existing-browser-session-selenium-java/</a></p>
  
  <p>I tried but having error as below:</p>
  
  <blockquote>
    <p>Exception in thread "main" org.openqa.selenium.json.JsonException:
    Unable to determine type from: &lt;. Last 1 characters read: &lt; Build
    info: version: '3.141.59', revision: 'e82be7d358', time:
    '2018-11-14T08:17:03' System info: host: 'xxxxxx', ip:
    'xxx.xx.xx.xx', os.name: 'Windows 10', os.arch: 'amd64', os.version:
    '10.0', java.version: '1.8.0_151'</p>
  </blockquote>
  
  <p>Code with cookie:</p>
  
  <pre><code>public static void main(String[] args) throws URISyntaxException, MalformedURLException {
      WebDriver driver = null;
  
      //WebDriverManager.chromedriver().setup();
      WebDriverManager.chromedriver().version(Configuration.getConfigurationValueForProperty("chrome-version"))
              .setup();
      ChromeOptions options = new ChromeOptions();
      options.addArguments("start-maximized");
      options.addArguments("enable-automation");
      // options.addArguments("--headless");
      options.addArguments("--no-sandbox");
      options.addArguments("--disable-infobars");
      options.addArguments("--disable-dev-shm-usage");
      options.addArguments("--disable-browser-side-navigation");
      options.addArguments("--disable-gpu");
      driver = new ChromeDriver(options);
      driver.get(Configuration.applicationUnderTestURL());
  
      Set&lt;Cookie&gt; name =driver.manage().getCookies();
  
      WebDriver driver3 = null;
  
      for(Cookie test: name) 
      {
          driver3.manage().addCookie(test);
      }
  
      driver3.get("https://stackoverflow.com/questions/8638241/setting-cookie-through-foreach-loop-inside-while-loop");
  
  }
  </code></pre>
  
  <p>Demo Code I have tried to with session id :</p>
  
  <pre><code>package stepdef;
  
  import java.io.IOException;
  import java.lang.reflect.Field;
  import java.net.MalformedURLException;
  import java.net.URI;
  import java.net.URISyntaxException;
  import java.net.URL;
  import java.util.Collections;
  
  import org.openqa.selenium.WebDriver;
  import org.openqa.selenium.chrome.ChromeDriver;
  import org.openqa.selenium.chrome.ChromeOptions;
  import org.openqa.selenium.remote.Command;
  import org.openqa.selenium.remote.CommandExecutor;
  import org.openqa.selenium.remote.DesiredCapabilities;
  import org.openqa.selenium.remote.HttpCommandExecutor;
  import org.openqa.selenium.remote.RemoteWebDriver;
  import org.openqa.selenium.remote.Response;
  import org.openqa.selenium.remote.SessionId;
  import org.openqa.selenium.remote.http.W3CHttpCommandCodec;
  import org.openqa.selenium.remote.http.W3CHttpResponseCodec;
  
  import automationframework.Configuration;
  import io.github.bonigarcia.wdm.WebDriverManager;
  
  public class testing {
  
  public static void main(String[] args) throws URISyntaxException, MalformedURLException {
      WebDriver driver = null;
  
      //WebDriverManager.chromedriver().setup();
      WebDriverManager.chromedriver().version(Configuration.getConfigurationValueForProperty("chrome-version"))
              .setup();
      ChromeOptions options = new ChromeOptions();
      options.addArguments("start-maximized");
      options.addArguments("enable-automation");
      // options.addArguments("--headless");
      options.addArguments("--no-sandbox");
      options.addArguments("--disable-infobars");
      options.addArguments("--disable-dev-shm-usage");
      options.addArguments("--disable-browser-side-navigation");
      options.addArguments("--disable-gpu");
      driver = new ChromeDriver(options);
      driver.get(Configuration.applicationUnderTestURL());
  
      SessionId session = ((ChromeDriver)driver).getSessionId();
  
      String session2 = session.toString();
  
      System.out.println(session2);
  
      String str = "http://google.com"; // just passing random URL as I have only session id
      URI uri = new URI(str);
      URL url = uri.toURL();
  
  
      RemoteWebDriver driver2 = createDriverFromSession(session, url);    
      driver2.get("http://tarunlalwani.com"); // here I am getting error where I need to resue the existing browser using session id
  
  
  
  }
  
  public static RemoteWebDriver createDriverFromSession(final SessionId sessionId, URL command_executor){
      CommandExecutor executor = new HttpCommandExecutor(command_executor) {
  
      @Override
      public Response execute(Command command) throws IOException {
          Response response = null;
          if (command.getName() == "newSession") {
              response = new Response();
              response.setSessionId(sessionId.toString());
              response.setStatus(0);
              response.setValue(Collections.&lt;String, String&gt;emptyMap());
  
              try {
                  Field commandCodec = null;
                  commandCodec = this.getClass().getSuperclass().getDeclaredField("commandCodec");
                  commandCodec.setAccessible(true);
                  commandCodec.set(this, new W3CHttpCommandCodec());
  
                  Field responseCodec = null;
                  responseCodec = this.getClass().getSuperclass().getDeclaredField("responseCodec");
                  responseCodec.setAccessible(true);
                  responseCodec.set(this, new W3CHttpResponseCodec());
              } catch (NoSuchFieldException e) {
                  e.printStackTrace();
              } catch (IllegalAccessException e) {
                  e.printStackTrace();
              }
  
          } else {
              response = super.execute(command);
          }
          return response;
      }
      };
  
      return new RemoteWebDriver(executor, new DesiredCapabilities());
  }
  }
  </code></pre>
  
  <p>Please Let me know if it is possible or any way around</p>