項目說明
爲實現定時模擬用戶上網的功能,並找出網頁元素訪問速度瓶頸,採用selenium
模擬瀏覽器方案測試網絡情況。
使用selenium
需要依賴firefox
(其他瀏覽器未嘗試),以及Xvfb
虛擬顯示。
安裝
selenium
xxx@ubuntu-svr:~$ pip install selenium
geckodriver
下載地址爲https://github.com/mozilla/geckodriver/releases,請自行選擇合適版本
適用於Firefox 48
版本及以上,解壓到/usr/bin/
目錄。
xxx@ubuntu-svr:~$ sudo apt-get update
xxx@ubuntu-svr:~$ sudo apt-get install firefox
xxx@ubuntu-svr:~$ cd /usr/bin && wget https://github.com/mozilla/geckodriver/releases/download/v0.20.0/geckodriver-v0.20.0-linux64.tar.gz
xxx@ubuntu-svr:~$ sudo tar zxvf geckodriver-v0.20.0-linux64.tar.gz
如果出現:
selenium.common.exceptions.WebDriverException: Message: connection refused
先查看日誌 geckodriver.log
如果出現Error: GDK_BACKEND does not match available displays
,說明需要安裝虛擬屏幕。
Xvfb
xxx@ubuntu-svr:~$ pip install pyvirtualdisplay
xxx@ubuntu-svr:~$ sudo apt-get install xvfb
在python
文件中添加
from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 600))
display.start()
#your code#
display.stop()
注意!!!:無stop,xvfb進程不會停止,內存泄漏。
示例
from pyvirtualdisplay import Display
from selenium import webdriver
import json
import time
# Attention: start Xvfb
display = Display(visible=0, size=(800, 600))
display.start()
# Get local session of firefox
browser = webdriver.Firefox()
url_in_queue = "http://www.taobao.com"
# Load page (wait 3 seconds to finish the GET request)
browser.get(url_in_queue)
time.sleep( 3 )
p_timing = browser.execute_script("return window.performance.timing")
#p_getEntries = browser.execute_script("return window.performance.getEntries()")
pageloadtime = p_timing["loadEventStart"] - p_timing["navigationStart"] #onload
dns = p_timing["domainLookupEnd"] - p_timing["domainLookupStart"] #dns
tcp = p_timing["connectEnd"] - p_timing["connectStart"] #tcp
ttfb = p_timing["responseStart"] - p_timing["navigationStart"] #ttfb
# Print result
print("onload %10.2f ms"%(pageloadtime))
print("dns %10.2f ms"%(dns))
print("tcp %10.2f ms"%(tcp))
print("ttfb %10.2f ms"%(ttfb))
browser.quit()
display.stop()