之前看乙醇視頻中提到,selenium 的ruby 實現(xiàn)有一個小后門,在代碼中加上$DEBUG=1 ,再運行腳本的過程中,可以看到客戶端請求的信息與服務器端返回的數(shù)據(jù);覺得這個功能很強大,可以幫助理解webdriver的運行原理。
后來查了半天,python并沒有提供這樣一個方便的后門,不過我們可以通過代理的方式獲得這些交互信息;
一、需要安裝java 虛擬機與selenium-server-standalone ,參考 《selenium + python自動化測試環(huán)境搭建》第7、8操作:
二、通過下面命令啟動服務:
C:selenium>java -jar selenium-server-standalone-2.33.0.jar
在命令結(jié)尾加 >d:log.txt 可以將命令信息存入文件,但信息很少。
然后運行下面的自動化腳本:
#coding = utf-8
import time
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
driver = webdriver.Remote(desired_capabilities=DesiredCapabilities.CHROME)
driver.get("http://www.youdao.com")
driver.find_element_by_name("q").send_keys("hello")
driver.find_element_by_name("q").send_keys("key.ENTER")
driver.close()
webdriver原理:
1. WebDriver 啟動目標瀏覽器,并綁定到指定端口。該啟動的瀏覽器實例,做為web driver的remote server。
2. Client 端通過CommandExcuter 發(fā)送HTTPRequest 給remote server 的偵聽端口(通信協(xié)議: the webriver wire protocol)
3. Remote server 需要依賴原生的瀏覽器組件(如:IEDriver.dll,chromedriver.exe),來轉(zhuǎn)化轉(zhuǎn)化瀏覽器的native調(diào)用。
查看命令提示符下的運行日志:
咋一看很亂,慢慢分析一下發(fā)現(xiàn)很有意思!結(jié)合上面的腳本分析
啟動代理進入監(jiān)聽狀態(tài)
C:selenium>java -jar selenium-server-standalone-2.33.0.jar
八月 22, 2013 10:19:48 上午 org.openqa.grid.selenium.GridLauncher main
INFO: Launching a standalone server
10:19:48.734 INFO - Java: Oracle Corporation 23.21-b01
10:19:48.734 INFO - OS: Windows XP 5.1 x86
10:19:48.734 INFO - v2.33.0, with Core v2.33.0. Built from revision 4e90c97
10:19:48.843 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub
10:19:48.843 INFO - Version Jetty/5.1.x
10:19:48.843 INFO - Started HttpContext[/selenium-server/driver,/selenium-server
/driver]
10:19:48.843 INFO - Started HttpContext[/selenium-server,/selenium-server]
10:19:48.843 INFO - Started HttpContext[/,/]
10:19:48.890 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@176343e
10:19:48.890 INFO - Started HttpContext[/wd,/wd]
10:19:48.906 INFO - Started SocketListener on 0.0.0.0:4444
10:19:48.906 INFO - Started org.openqa.jetty.jetty.Server@388c74