參考
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時(即調用以下語句初始化一個"瀏覽器"時)都發(fā)生了什么
webdriver.Chrome(chrome_options=chrome_options)
- 初始化并持有一個common.service.Service舅锄,實際是從系統獲取一個未被占用的端口,調用subprocess.Popen()啟動了一個chromedriver.exe
- 初始化并持有一個chrome.remote_connection.ChromeRemoteConnection话肖,作為一個command executor,可以通過這個executor向Step1的chromedriver發(fā)送各種指令(get葡幸,find_element之類的)
- 完整的初始化webdriver自己最筒,通過self.execute(Command.NEW_SESSION, parameters)初始化一個session@TODO
- 其他
通過webdriver調用get,find_element之類的命令時蔚叨,都發(fā)生了什么(以get為例)
- WebDriver通過自身持有的command executor床蜘,調用self.command_executor.execute('GET', params)
- command_executor(即ChromeRemoteConnection實例)通過HTTP請求的方式,向本地已啟動的已知端口的chromedriver.exe的Service發(fā)送請求缅叠,獲取返回值
- WebDriver將返回值返回給調用者
下面是時序圖悄泥,部分非關鍵步驟省略
Selenium3.14.1時序.png