项目说明
为实现定时模拟用户上网的功能,并找出网页元素访问速度瓶颈,采用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()