Selenium源码学习

参考
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版本源码

Selenium3.14.1
初始化webdriver时(即调用以下语句初始化一个"浏览器"时)都发生了什么
webdriver.Chrome(chrome_options=chrome_options)
  1. 初始化并持有一个common.service.Service,实际是从系统获取一个未被占用的端口,调用subprocess.Popen()启动了一个chromedriver.exe
  2. 初始化并持有一个chrome.remote_connection.ChromeRemoteConnection,作为一个command executor,可以通过这个executor向Step1的chromedriver发送各种指令(get,find_element之类的)
  3. 完整的初始化webdriver自己,通过self.execute(Command.NEW_SESSION, parameters)初始化一个session@TODO
  4. 其他
通过webdriver调用get,find_element之类的命令时,都发生了什么(以get为例)
  1. WebDriver通过自身持有的command executor,调用self.command_executor.execute('GET', params)
  2. command_executor(即ChromeRemoteConnection实例)通过HTTP请求的方式,向本地已启动的已知端口的chromedriver.exe的Service发送请求,获取返回值
  3. WebDriver将返回值返回给调用者

下面是时序图,部分非关键步骤省略


Selenium3.14.1时序.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,695评论 1 45
  • 放飞我的梦想 文/紫色人生 清晨的阳光 照进我的心房 我捧出折叠的翅膀 放飞出我的梦想 高山听到了我的心跳 回...
    紫色人生阅读 446评论 2 5
  • 时光以它自己独特的方式将世界带入2019年。 昨天北方农历的小年拉开了序幕,今天南方也同样在预定的时间里迈开了年的...
    晨风_d76b阅读 4,162评论 112 173
  • 嗯到时间了(ーー;) 要走了(⊙_⊙) 欸,火车上真的讯号不好(~_~;) 我也真的好累想睡(・_・; 但是要打卡...
    十七不是大傻个儿阅读 175评论 0 1