参考
Python+Selenium
https://www.cnblogs.com/simple-free/category/1161961.html
源码
https://blog.csdn.net/ant_ren/article/details/7970793
不拾人牙慧,看了下Python源码画个图
只画了Chrome的情况,其他浏览器也是类似的继承/持有关系,以后有时间再研究@TODO
类图和时序图都是参考Selenium3.14.1 Python版本源码
初始化webdriver时(即调用以下语句初始化一个"浏览器"时)都发生了什么
webdriver.Chrome(chrome_options=chrome_options)
- 初始化并持有一个common.service.Service,实际是从系统获取一个未被占用的端口,调用subprocess.Popen()启动了一个chromedriver.exe
- 初始化并持有一个chrome.remote_connection.ChromeRemoteConnection,作为一个command executor,可以通过这个executor向Step1的chromedriver发送各种指令(get,find_element之类的)
- 完整的初始化webdriver自己,通过self.execute(Command.NEW_SESSION, parameters)初始化一个session@TODO
- 其他
通过webdriver调用get,find_element之类的命令时,都发生了什么(以get为例)
- WebDriver通过自身持有的command executor,调用self.command_executor.execute('GET', params)
- command_executor(即ChromeRemoteConnection实例)通过HTTP请求的方式,向本地已启动的已知端口的chromedriver.exe的Service发送请求,获取返回值
- WebDriver将返回值返回给调用者
下面是时序图,部分非关键步骤省略
Selenium3.14.1时序.png
网友评论