项目说明

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

更多推荐