第二篇:Python Webdriver 重新使用已经打开的浏览器实例----通过重新建立会话(目的实现web自动化的断点调试)
一、基本原理在一个未关闭的会话前提下,通过重写senlium中start_seeion(),将重新打开新会话思路改成连接上指定的已有的会话。二、运用场景因为Webdriver每次实例化都会新开一个全新的浏览器会话,在有些情况下需要复用之前打开未关闭的会话。比如爬虫,希望结束脚本时,让浏览器处于空闲状态。当脚本重新运行时,它将继续使用这个会话工作。还就是在做...
一、基本原理
在一个未关闭的会话前提下,通过重写senlium中start_seeion(),将重新打开新会话思路改成连接上指定的已有的会话。
二、运用场景
因为Webdriver每次实例化都会新开一个全新的浏览器会话,在有些情况下需要复用之前打开未关闭的会话。比如爬虫,希望结束脚本时,让浏览器处于空闲状态。当脚本重新运行时,它将继续使用这个会话工作。还就是在做自动化测试时,前面做了一大推操作,但是由于程序出错,重启时不用再继续前面复杂的操作。
三、操作步骤
第一步:使用senlium,通过调用webdriver,驱动浏览器,并打开指定网址,并获取session_id和command_executor._url
(以chromedriver为例,url=https://www.baidu.com,其他浏览器也一样的,注意驱动版本和浏览器版本对应就行):
py脚本如下:
from selenium import webdriver
driver=webdriver.Chrome(executable_path=r"C:\KFSofts\AutoFrameWork\chromedriver.exe")
print driver.session_id
print driver.command_executor._url
driver.get("https://www.baidu.com/l")
driver.maximize_window()
print driver.session_id
print driver.command_executor._url
执行以上代码,如果如下:

第二步操作:重新senlium中start_seeion()方法,并将第一步获取到session_id和executor_url,实现重新建立会话,代码如下:
#-*- coding:utf-8 -*- from selenium.webdriver import Remote from selenium.webdriver.chrome import options class ReuseBrowser(Remote): def __init__(self, command_executor, session_id): self.r_session_id = session_id Remote.__init__(self, command_executor=command_executor, desired_capabilities={}) def start_session(self, desired_capabilities, browser_profile=None): capabilities = {'desiredCapabilities': {}, 'requiredCapabilities': {}} for k, v in desired_capabilities.items(): if k not in ('desiredCapabilities', 'requiredCapabilities'): capabilities['desiredCapabilities'][k] = v else: capabilities[k].update(v) if browser_profile: capabilities['desiredCapabilities']['firefox_profile'] = browser_profile.encoded self.w3c = "specificationLevel" in self.capabilities self.capabilities = options.Options().to_capabilities() self.session_id = self.r_session_id self.w3c = False if __name__=="__main__": driver=ReuseBrowser("http://127.0.0.1:50912","bc22da4a63675db92e5ad000efb51c35") driver.maximize_window() driver.find_element_by_id("kw").send_keys("驱动自动化") driver.find_element_by_id("su").click()基于以上实现,下一步是实现和自动化测试框架和senlium2library库的结合。
更多推荐


所有评论(0)