由于Webdriver每次实例化都会新开一个全新的浏览器会话,在有些状况下须要复用以前打开未关闭的会话。好比爬虫,但愿结束脚本时,让浏览器处于空闲状态。当脚本从新运行时,它将继续使用这个会话工做。还就是在作自动化测试时,前面作了一大推操做,可是因为程序出错,重启时不用再继续前面复杂的操做。java
我的以为这种功能很是有用,可是官方竟然没有提供这种功能的API,苦苦搜搜,在网上找了两个java版的http://blog.csdn.net/wwwqjpcom/article/details/51232302 和 http://woxiangbo.iteye.com/blog/2372683
看了下源码其实java和python的驱动原理过程都很是类似。python
打开一个Chrome会话:web
from selenium import webdriver
driver = webdriver.Chrome()
运行上面的脚本,它将启动浏览器并退出。由于没有调用quit()方法,因此浏览器会话仍会存在。可是代码里建立的driver对象已经不在了,理论上不能用脚本控制这个浏览器。它将变成一个僵尸浏览器,只能手动杀死它。chrome
经过webdriver启动一个浏览器会话大概会有这样三个阶段:shell
一、启动的浏览器驱动代理(hromedriver,Firefox的驱动程序,等等);
二、建立一个命令执行器。用来向代理发送操做命令;
三、使用代理创建一个新的浏览器会话,该代理将与浏览器进行通讯。用sessionId来标识会话。
所以只要拿到阶段2中的执行器和阶段3中的sessionID就能恢复上次的会话。这两个有api能够直接获取: